web-dev-qa-db-ja.com

リベースで行われたgitrerere解決を元に戻します

さて、私はgitrerereコマンドが本当に好きです。ただし、競合を自動的に魔法のように記録して解決する以外は、あまり使用していません。ただし、非常に大規模なリベース中に競合解決の1つを台無しにしました(最新リリースで非常に古い機能ブランチをリベースしました)。

feature -> a - b - c - d

release -> e - f - g - h

rebase/feature -> e - f - g - h - a' - b' - c' - d'

たとえば、b 'のマージが正しくない場合(ありがとうございます!)、それを再記録したいとします。どうすればいいですか? Rerere Your Boat で言及されているgit checkout --conflictオプションを見てきましたが、それがどのように機能し、ここで適用されるかについてはあまり明確ではありません。この競合を正しく解決したら、マージの競合状態をチェックアウトしてgit rerereを実行する必要があるかもしれませんか?

通常、私はリベースブランチの先端にコミットするだけですが、それは捨てられます。競合を事前に処理しようとしているだけなので、その機能チームと同期するときに、かかる時間を最小限に抑えることができます。意味がありますか?

30
kevinmm

以前のすべてのrerere解像度を単純に削除するには、rm -rf .git/rr-cacheを実行してキャッシュを削除します。

特定のマージの場合、マージを再実行し、rerereが記録された解像度を作業ツリーに適用できるようにすることで、記録された解像度を忘れるようにrerereに指示できます。

a'をチェックアウトしてから、git merge bを実行して、その状況に戻ることができます(a'のコミットハッシュを指定したため、おそらく、切り離されたヘッドのチェックアウトになります。したがって、ブランチに参加していないことに注意してください)。

次に、git rerere forget FILE-WITH-BAD-MERGEを使用して、記録された競合解決を忘れるファイルを指定します。

forget <pathspec>
現在の競合についてrerereが記録した競合解決をリセットします。

git-rerereのGitドキュメント から。)

36
Colin D Bennett