Git: Найти последнего общего предка двух веток - PullRequest
734 голосов
/ 11 октября 2009

Как найти самого последнего общего предка двух веток Git?

Ответы [ 4 ]

881 голосов
/ 11 октября 2009

Вы ищете git merge-base. Использование:

$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
34 голосов

git diff master...feature

показывает все новые коммиты вашей текущей (возможно, многокомпонентной) ветки функций.

man git-diff документы, которые:

git diff A...B

совпадает с:

git diff $(git merge-base A B) B

но ... легче набирать и запоминать.

Как уже упоминалось Дейвом , особый случай HEAD может быть опущен. Итак:

git diff master...HEAD

совпадает с:

git diff master...

, что достаточно, если текущая ветвь равна feature.

Наконец, помните, что порядок имеет значение! Выполнение git diff feature...master покажет изменения, которые включены master, а не feature.

Я бы хотел, чтобы больше команд git поддерживали этот синтаксис, но я не думаю, что они это делают. А некоторые даже имеют различную семантику для ...: В чем разница между двойной точкой ".." и тройной точкой "..." в диапазонах фиксации Git?

20 голосов
/ 09 февраля 2017

Как отмечалось в предыдущем ответе, git merge-base работает:

$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

но если myfeature текущая ветвь, как обычно, вы можете использовать команду --fork-point:

$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

Этот аргумент работает только в достаточно последних версиях git. К сожалению, это не всегда работает, и не понятно почему. Пожалуйста, ознакомьтесь с ограничениями, указанными в конце этого ответа .


Для полной информации о коммите, рассмотрите:

$ git log -1 $(git merge-base --fork-point develop) 
11 голосов
/ 08 февраля 2017

С помощью gitk вы можете графически просмотреть две ветви:

gitk branch1 branch2

И тогда легко найти общего предка в истории двух ветвей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...