В Git есть способ (или инструмент) для слияния путем сравнения изменений, а не файлов?

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

Помогает установка конфликтов слияния стиль = diff3 в.gitconfig, показывая общего предка. Тем не менее, мне все еще приходится делать различия в моей голове - то есть сканировать различные разделы, чтобы выяснить, что изменилось между предком и ветвью A, а также между предком и ветвью B, а затем, наконец, применить оба к предку или применить один ветка меняется на другую.

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

1 ответ

git cherry а также git patch-id может помочь вам найти то, что вы ищете.

Набор изменений (или "diff") каждого коммита между точкой ветвления и заголовком сравнивается с каждым коммитом между точкой ветвления и восходящим потоком. Коммиты сравниваются с их патчем, полученным из git patch-id программа.

Каждый коммит, который не существует в вышестоящей ветке, имеет свой идентификатор (sha1) с префиксом символа. Те, которые имеют эквивалентные изменения уже в восходящей ветви, имеют префикс минус (-), а те, которые существуют только в головной ветви, имеют префикс плюс (+) условное обозначение:

 __ * __ * __ * __ * __> 
          /
вилочных точка
          \__+__+__-__+__+__-__+__>  
Другие вопросы по тегам