Как узнать, какой из Git вызывает конфликты причин?

Я объединяю восходящие изменения в свой проект, и недавно было много коммитов, которые создали много конфликтов слияния. Не имеет смысла пытаться разрешить их все сразу.

Как я могу узнать, какие коммиты создают конфликт? Любое из следующих допустимо:

  • Способ сделать Git прекратить слияние, как только он обнаружит конфликт
  • Способ сделать Git список всех коммитов, которые конфликтуют, в хронологическом порядке
  • Что-нибудь еще, что позволяет мне разрешать конфликты один за другим в хронологическом порядке, что не предполагает слияния нескольких коммитов в то время, надеясь наткнуться на конфликты.

Ответы

Ответ 1

Вы можете дать git imerge попытку: она будет применять ваши коммиты один за другим, давая вам возможность сделать rebase постепенно (это означает, что вы можете начать переустановку, прервать ее, возобновить позже).

Здесь вы можете увидеть сравнение Инкрементное слияние против прямого слияния против rebase.

Ответ 2

Майкл Хаггерти также имеет инструмент под названием git-mergemate, который имеет команду find-conflict:

git-mergemate find-conflict BRANCH1..BRANCH2

Используйте деление пополам, чтобы определить самую раннюю фиксацию на BRANCH2, которая   вызывает конфликт при объединении с BRANCH1. Не на самом деле   сохраняйте любые слияния.

git-mergemate find-conflict BRANCH1...BRANCH2

Используйте деление пополам, чтобы найти пару ранних коммитов (один из   каждая ветвь), которые не сливаются чисто. На самом деле не сохраняйте   любые слияния.

git imerge можно использовать для постепенного слияния и разрешения конфликтов на этом пути, хотя у него нет эквивалента find-conflicts в git-mergemate.

Ответ 3

Есть ли причина, по которой вы бы просто не хотели использовать rebase (не интерактивно) для синхронизации с изменениями в вверх по течению? Он прекратится, если на каждом коммите будет конфликт, и после этого вы сможете возобновить переустановку. Он похож на инкрементное слияние, и он построен прямо в Git, нет необходимости в внешнем плагине/инструменте:

git fetch <remote>
git rebase <remote>/<upstream-branch>
# Conflict on commit X, resolve conflict, then continue the rebase
git rebase --continue

Предупреждение о принудительном нажатии перезаписываемых коммитов

Обратите внимание, конечно, что перезагрузка вашего локального ветки изменит идентификаторы шайтов своих коммитов. Если вы уже подтолкнули коммиты, которые хотите переустановить на свой пульт, тогда вам нужно будет заставить новые коммиты перезаписывать старые, что может представлять потенциальную проблему, если вы делитесь своей веткой с другими людьми, Вы можете узнать больше об этих проблемах в: