Вы можете увидеть эффективную разницу в ревизиях между ветвями, передав опцию --cherry-pick в git log.
Мои любимые заклинания:
git log --left-right --graph --cherry-pick --oneline branch1...branch2
(которые у меня есть псевдонимы как git lr
).
Из страницы руководства :
--cherry-pick
Пропустить любой коммит, который вводитто же самое изменение, что и другой коммит на «другой стороне», когда набор коммитов ограничен симметричной разностью .
Например, если у вас есть две ветви, A и B, обычный способ перечисления всех коммитов только на одной их стороне - с помощью --left-right
(см. Пример ниже в описании --left-right
опция).Однако он показывает коммиты, которые были выбраны вишней из другой ветви (например, «3-е на b» может быть выбрано вишней из ветви A). При использовании этой опции такие пары коммитов исключаются из вывода .
--cherry-mark
Как --cherry-pick
(см. ниже выше )но помечайте эквивалентные коммиты с =
вместо их пропуска, а неэквивалентные с +
.
Постоянное решение # 1
Чтобы навсегда перестать беспокоиться о коммитах, которые были фактически выбраны, вы всегда можете объединить другой филиал.Коммит слияния будет помечен как дочерняя ревизия как предыдущего коммита , так и кончика слитого дерева ревизий .
Это говорит об обходе дерева ревизий, чтобы прекратить просмотр истории в этой точке.Это было бы безопасно только при объединении ревизии из «другой» ветки IFF, вы ** знаете, что все ее родители были объединены (насколько вы захотите, чтобы они были объединены).
Постоянное решение # 2
Существует также способ использования графтов .Это действительно ничего не значит, кроме того, что вы скажете git - out of band 1 - что определенная ревизия является дочерней по отношению к другой ревизии, без необходимости фактически переходить на / слияния с ней.
1 как, рукописный файл с парами хэшей sha1:)
Положительным моментом является то, что вы не иметь переписать историю , чтобы это работало.Однако, если вы хотите, вы можете использовать git filter-branch
, чтобы сделать трансплантаты постоянными .Вам больше не нужен файл grafts , но, конечно, вы вернетесь с недостатками необходимости переписывать историю (и, возможно, аннулировать опубликованные идентификаторы ревизий).
Свободные концы?
Если все остальное терпит неудачу, иногда вы можете застревать с удаленными (тематическими) ветками, из которых вы часто хотите объединяться, но есть различия, которые вы просто никогда не захотитебрать.Это, вероятно, приведет к одним и тем же конфликтам слияния снова и снова.
В этом случае я просто укажу на git-rerere (повторное использование записанного разрешения конфликтующих слияний) , которое может значительно облегчить жизнь, хотя и сложнее