7

バックグラウンド

現在、git rerere を有効にしてマージの競合を解決しています。git statusは、マージされていない 1 つのパスを示しています。ファイルを表示すると、競合を特定するマーカー<<<<<<< HEADまたは>>>>>>> <SHA>マーカーはありません。これは、rerere がその作業を完了し、過去に行った方法に従って競合を解決したことを示しています。

rerere の決議が正しいことを確認したいと思います。

私が取り組んでいるマージ プロセスは、Linux カーネルに貢献する複数のリモートを含む非常に複雑です。昨日、競合を特定し、メンテナーに通知し、結果の (確実に壊れた) カーネルを破棄することを目的として、いくつかのリモートのテスト マージを行いました。そうしている間、私は次のリモートに移動するためだけにいくつかの不注意な競合解決を行い、git rerere forget <pathspec>完了後に競合するすべてのパスを呼び出しました。これには、現在扱っているものも含まれます。rerere にこのパスを忘れるように言ったので、なぜこの実行で何かが解決されたのかわかりません。また、結果が正しいかどうかを気にしない昨日行った修正が適用されたのではないかと心配しています。

質問

解決策が適用された後、どの競合が解決されたかを確認する方法はありますか?

まだ完全に自動化されていない長いプロセスであるため、マージの再開は避けたいと思います。あと、昨日リレレにこの道を忘れろと言おうとしたのに、今日も解決策が適用されたので、git rerere forget <pathspec>最初に失敗した理由を見つけないと同じ立場になってしまうと思います。

関連する質問リベースで行われたgit
rerere の解決を元に戻す <-- ソリューションにはマージの再起動が必要 <-- 議論のみ
git rerere forget <pathspec>

フォローアップ メモ/質問
パス指定なしで 入力しようとgit rerere forgetしましたが、これは推奨されていないことを認識していますが、正しく理解していれば、すべての解決策を忘れてしまうはずです。マージを再実行しましたが、ファイルに解像度が適用されました。また、rerere を完全に無効にして 3 回目のマージを実行したので、競合を確認できました。rerere は、昨日行った中途半端な解決策を実際に適用していました。forget再利用したくない解決策が正しく破棄されないのはなぜですか?

4

1 に答える 1

8

次のコマンドを使用して、再生成されていないマージ結果に切り替えることができます

git checkout -m path/to/file

そして、それを再適用します

git rerere

忘れ物トラブルについてですが、紛争が続いている間に忘れ物をしましたか?「<pathspec> の現在の競合」に適用されるのを忘れる

$ git checkout master^1
Warning: you are leaving 1 commit behind, not connected to
any of your branches:


  9e2db79 test3

HEAD is now at ca1fca7... Make a change to file (on master)
$ git merge master^2
Auto-merging file.txt
CONFLICT (content): Merge conflict in file.txt
Resolved 'file.txt' using previous resolution.
Automatic merge failed; fix conflicts and then commit the result.
$ git rerere forget file.txt
Updated preimage for 'file.txt'
Forgot resolution for file.txt
$ vi file.txt                     # old resolution's still in the worktree
$ git checkout -m file.txt        # now it's gone there too
于 2016-06-17T20:33:24.527 に答える