10

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
4

2 に答える 2

12

EGit

これに必要な再帰的マージ戦略は、EGit 3.0以降のデフォルトです(バグ380314を参照)。

古いバージョンを使用している場合は、ダウンロードページを参照してアップグレードしてください。

回避策

または、最後のマージを行う前に最後のローカルコミットにリセットしてから、とマージしてみてくださいorigin/master。次に、元のマージに加えてさらに変更を加えた場合は、これらをチェリーピックします。

もう1つの可能性は、C git(コンソール上)を使用してマージを実行することです。これにより、その状況を処理できます。

于 2012-09-01T11:11:33.310 に答える
5

最新の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'
于 2013-05-02T13:24:01.037 に答える