11

既存のマージ コミットから競合解決を再利用するように Git に指示できますか? コミット時に rerere を無効にしていました。新しいマージ コミットには、マージの「私たち」側にいくつかの追加のコミットが含まれています (ただし、別のファイル セットを変更したため、新しい競合が発生することはありません)。


たとえば、次の DAG を使用します。

m [master] Add new stuff
*
| o [old-master] Merge branch A (conflicts)
|/a [branch A]
n *
* *
*/
*

今、私がやりたいことは、コミットmm^ブランチに持ち込むことですold-master(後でそれを新しいマスターにします)。新しいマージコミットが作成されるため(競合はありませんが)、単純に にマージmasterしたくありません。コミットを親として再作成しold-masterたい。oma

新しい DAG は次のようになります。

  p [old-master] Merge branch A (same conflict resolution as old commit o)
 /|
m | [master] Add new stuff
* |
| a [branch A]
n *
* *
*/
*

後で既存のマージコミットの解決を記録するように指示できれば、rerere を使用してもかまいません ( o)。

4

1 に答える 1

15

あなたが求めているものを実装する最も簡単な方法は、おそらくさかのぼって rerere をオンにすることです:

git config rerere.enabled true    # with rerere turned on,

git checkout $o^1             # rerun the original merge
git merge $o^2
git read-tree --reset -u $o:  # resolve conflicts exactly as before

git commit                    # throwaway commit to feed the results to rerere

そして今、rerere はあなたがそれらの衝突に対して何をしたかを見てきました。

git checkout -B old-master $o^1   # rewind `old-master` to before the merge
git merge master              # rerun it with current ancestry
于 2014-05-26T00:56:43.167 に答える