如何在EGit Eclipse插件中解决"多个合并基础"错误?

9 git merge eclipse-plugin egit

使用eclipse egit插件我遇到了"多个合并基础"异常.在我成功解决问题之前,这次没有任何帮助.即使在创建了额外的提交和分支之后,樱桃挑选.存储库分支似乎被阻止合并.

这是例外:

An internal error occurred during: "Merging with refs/remotes/origin/master".
Exception caught during execution of merge command. java.io.IOException: Multiple merge bases for:
 082a3a9846147a0e6df72d6cffa6d6e517275b7b
 4d6c573c52ebb0de091bd91dbcefcbcbd44e7534 found:
 c480f2b3683a5d0c5607984ea6393d61dfa9fba4
 9da20a3c6304059ed92296ef2decb6f04e7112df
Run Code Online (Sandbox Code Playgroud)

rob*_*nst 12

例如:It

这需要的递归合并策略是自EGit 3.0以来的默认策略(参见错误380314).

如果您使用的是旧版本,请参阅下载页面进行升级.

解决方法

或者,尝试在上次合并之前重置为上次本地提交,然后合并origin/master.然后,如果你在原始合并之上做了更多更改,那就选择这些.

另一种可能性是使用C git(在控制台上)进行合并,它可以处理这种情况.


Mar*_*oth 5

如果您不能或不想更新到最新的EGit,那么最可靠的解决方法是(如robinst建议的那样)从此状态恢复然后在命令行上合并.

  • 请注意,正确地从中恢复非常重要,因为Multiple merge bases问题会使您的存储库处于合并状态的中间.
  • 如果您没有正确恢复,那么您执行的下一次提交将导致合并提交,该默认会恢复所有远程更改!
    • 换句话说,当您按下时,只有您的本地更改将最终在遥控器上.所有远程更改看起来都已合并,但会被忽略,就像git merge -s ours在执行推送之前一样.

你可以检查一下,如果你是在合并状态通过寻找MERGE_HEADMERGE_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'
Run Code Online (Sandbox Code Playgroud)

然后,您可以在尝试从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
Run Code Online (Sandbox Code Playgroud)

与往常一样,这将丢失自上次提交以来所做的任何和所有更改.

  • 注意:这就是为什么在执行pull或merge之前提交所有更改的好主意.
    • 如果pull或merge失败并且您的存储库处于不一致状态,您希望能够在再次尝试pull/merge之前重置回已知的好点.
  • 作为拉/合并之前提交的替代方法,您还可以存储更改,执行合并然后解除它们.这是有效的就像一个小型的底垫对合并的顶部未提交的修改,但有一个预合并的安全网提交.

请注意,您也可以执行此操作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'
Run Code Online (Sandbox Code Playgroud)