Повторное использование разрешения конфликтов с Git

Могу ли я сказать Git повторно использовать разрешение конфликта из существующего коммита слияния? Я был повторно отключен во время коммита. Новый коммит слияния содержит несколько дополнительных коммитов на "нашей" стороне слияния (но они не должны вводить новые конфликты, так как они изменили другой набор файлов).


Например, возьмите следующий DAG:

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

Теперь, что я хочу сделать, это принести коммиты m а также m^ в ветку old-master (а позже сделаю это новым хозяином). Я не хочу просто сливаться master в old-master, поскольку он создаст новый коммит слияния (хотя и без конфликтов). Я хочу воссоздать коммит o с m а также a как родители.

Новый 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).

1 ответ

Решение

Самый простой способ реализовать то, что вы просите, это, вероятно, задним числом включить 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
Другие вопросы по тегам