10

使用 eclipse egit 插件我遇到了“多个合并基础”异常。在我设法解决这种情况之前,但这一次没有任何帮助。即使在创建了额外的提交和分支之后,cherry pick。存储库分支似乎被阻止合并。

这是一个例外:

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
4

2 回答 2

12

EGit

为此所需的递归合并策略是自 EGit 3.0 以来的默认策略(请参阅错误 380314)。

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

解决方法

或者,在进行最后一次合并之前尝试重置为上一次本地提交,然后与origin/master. 然后,如果您在原始合并之上进行了更多更改,请选择这些。

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

于 2012-09-01T11:11:33.310 回答
5

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

  • 请注意,正确地从中恢复很重要,因为Multiple merge bases问题会使您的存储库处于合并状态的中间。
  • 如果您没有正确恢复,那么您所做的下一次提交将导致合并提交,它会默默地恢复所有远程更改!
    • 换句话说,当你推送时,只有你的本地更改会在远程结束。所有远程更改看起来像是已合并,但会被忽略,就像在git merge -s ours推送之前所做的那样。

您可以通过查找文件夹中MERGE_HEAD的文件来检查您是否处于合并状态。只是做一个告诉你:MERGE_MSG.gitgit statusnothing 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'
于 2013-05-02T13:24:01.037 回答