如果您不能或不想更新到最新的 EGit,那么最可靠的解决方法是(如robinst 建议的那样)从该状态恢复,然后在命令行上合并。
- 请注意,正确地从中恢复很重要,因为
Multiple merge bases
问题会使您的存储库处于合并状态的中间。
- 如果您没有正确恢复,那么您所做的下一次提交将导致合并提交,它会默默地恢复所有远程更改!
- 换句话说,当你推送时,只有你的本地更改会在远程结束。所有远程更改看起来像是已合并,但会被忽略,就像在
git merge -s ours
推送之前所做的那样。
您可以通过查找文件夹中MERGE_HEAD
的文件来检查您是否处于合并状态。只是做一个告诉你:MERGE_MSG
.git
git status
nothing to commit
$ git status
# On branch master
# Your branch and 'origin/master' have diverged,
# and have 4 and 25 different commit(s) each, respectively.
#
nothing to commit (working directory clean)
$ cat .git/MERGE_HEAD
1234567890abcdef1234567890abcdef12345678
$ cat .git/MERGE_MSG
Merge remote branch 'origin/master'
然后,您可以返回到尝试从 EGit 合并之前所处的状态。
$ git reset --hard
HEAD is now at 0123456 Blah blah blah
$ cat .git/MERGE_HEAD .git/MERGE_MSG
cat: .git/MERGE_HEAD: No such file or directory
cat: .git/MERGE_MSG: No such file or directory
与往常一样,这将丢失自上次提交以来所做的所有更改。
- 注意:这就是为什么在进行拉取或合并之前提交所有更改是一个好主意的原因。
- 如果拉取或合并失败并且您的存储库处于不一致的状态,您希望能够在再次尝试拉取/合并之前重置回一个已知的好点。
- 作为在拉取/合并之前提交的替代方法,您还可以存储更改,执行合并,然后取消存储它们。这实际上就像在合并之上对未提交的更改进行小型变基,但具有合并前提交的安全网。
请注意,您也可以执行git merge --abort
,但是在某些版本的 git 上,这建议您提交更改,如果您想避免远程更改被静默还原(您绝对不希望这样做),则不应该这样做。
您现在可以使用 git 命令行重新运行您最初想要的合并,这将使用递归解析策略,因此应该可以正常工作:
$ git merge origin/master
Auto-merging ...
...
Merge made by recursive.
...
$ git --no-pager log -1 --oneline
2345678 Merge remote branch 'origin/master'