Leo*_*rdo 3 git rebase git-rebase
我创建了一个分支来开发新功能。由于这个新功能完全是作为一个新项目开发的,唯一可能的冲突来源是解决方案文件。
随着功能的开发,主分支更新了几次。当我完成开发和测试时,我做了:
git checkout master
git fetch
git pull
git checkout myFeature
git rebase master
Run Code Online (Sandbox Code Playgroud)
变基(和所有其他命令)运行良好,没有报告任何冲突/错误/问题。我的下一步是,git status结果是:
在分支 myFeature
你的分支和 'origin/myFeature' 有分歧,分别有 7 和 5 个不同的提交。(使用“git pull”将远程分支合并到你的分支中)
当我git pull打开合并并查看历史记录时,我的提交被重复了。在我看来,这种重复是不应该发生的。我期待我的提交应该在最后一次(当前)提交后重新应用。
我做错了什么还是我的期望是错误的?
当您进行 rebase 时,您正在更改 Git 历史记录。当您再次执行拉取操作时,Git 会尝试再次合并两个历史记录。默认情况下git pull是git fetch+ git merge,这将导致合并提交。
这不是您在更改历史后想要的,因为它会(部分)恢复您的历史更改。不幸的是,暗示git status有点误导......
在更改历史(例如 rebase)之后,您需要强制推送,以便您也将在遥控器上获得该历史。你告诉 git 然后“历史是不同的,但相信我,这是有意的”。
建议使用“带租约的强制推送”:git push --force-with-lease- 参见git push --force-with-lease vs. --force。
幸运的是,您可以git pull使用 Git reflog回到 之前!
这将修复错误的拉动,并且不会有任何冲突需要解决:)
所以步骤如下:
git reflog,所以在之前git pull(注意:您可以通过键入退出 reflog q)git reset 327fb961e --hardgit push --force-with-lease.注意:如果您在使用 时出错git reset,您可以git reflog再次使用:)
注 2:reflog 仅在您的本地机器上
| 归档时间: |
|
| 查看次数: |
576 次 |
| 最近记录: |