コメントで述べたrerere-train.shスクリプトの機能は次のとおりです。基本的に、マージをやり直し、解決策を使用して、rerereに表示させます。必要に応じて、単一のコミットに対してこれを手動で行うことができます。
git checkout <parent of merge commit>
git merge <merged commit> # if this goes cleanly, we're done
git rerere # done automatically if rerere.enabled is true
git checkout <merge commit> -- . # check out the files from the result of the merge
git rerere # done automatically if rerere.enabled is true
git reset --hard # wipe away the merge
# and you'd want to follow with git checkout <branch> to return to where you were
ただしrerere.enabled
、trueに設定して、への直接呼び出しを除いた手順を実行することもできgit rerere
ます。将来的には、競合を解決するたびにrerereが自動的に実行されるように設定されます。これが私がしていることです—それは素晴らしいです。
スクリプトを直接実行する場合は、のような引数を使用してスクリプトを実行することをお勧めしますrerere-train.sh ^<commit before the merge> <current branch>
。(この^commit
表記は「これを通り過ぎて履歴に入れない」ことを意味するため、リポジトリ内のすべてのマージコミットに対してこれを行う必要はありません。)
しかし、あなたはそのことをやり直すことになりますが、あなたは記録された望ましい解像度で終わるはずです。つまり、先に進んで実行することができrebase -i
、競合が発生した場合、rerereはREcordedREsolutionを再利用します。ただの注意点:それでも、インデックスで競合としてマークされたファイルが残るので、それらを調べて、それが意味をなさないことを確認できます。完了したらgit add
、競合を自分で解決したかのようにチェックインして、通常どおり続行します。
git-rerere
マンページには、rerereの通常の使用法についての非常にわかりやすく長い説明が含まれています。これには、実際にrerereを呼び出す必要はなく、すべて自動的に行われます。また、強調されていないことに注意してください。すべて競合ハンクに基づいているため、競合が完全に別の場所で発生した場合でも、同じテキストの競合である限り、解決策を再利用できます。