Вот что делает сценарий rerere-train.sh , о котором я упоминал в своем комментарии - по сути, он повторяет слияние, использует ваше разрешение и просто позволяет повторно просмотреть его.Вы можете сделать это вручную только для одного коммита, если хотите:
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
означает «не проходите мимо этого в историю», поэтому оно не будет беспокоиться о том, что all слияние совершается в вашем репо.)
Однаковы получаете rerere, чтобы сделать свое дело, вы должны в конечном итоге с желаемым записанным разрешением.Это означает, что вы можете пойти дальше и выполнить перебазирование -i, а когда вы столкнетесь с конфликтом, rerere повторно использует REcorded REsolution.Просто напоследок: он по-прежнему оставляет файлы, помеченные в индексе как конфликтующие, чтобы вы могли их проверить и убедиться, что то, что он сделал, имеет смысл.Как только вы это сделаете, используйте git add
, чтобы проверить их, как если бы вы сами разрешили конфликты, и продолжайте как обычно!
git-rerere
manpage содержит очень хороший,длинное описание нормального использования rerere, которое никогда не включает в себя фактический вызов rerere - все это делается автоматически.И примечание, в котором это не подчеркивается: все это основано на фрагментах конфликта, поэтому оно может повторно использовать разрешение, даже если конфликт заканчивается в совершенно другом месте, если это все тот же текстовый конфликт.