最新の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'