Найдите общего предка из двух ветвей git

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

Ответы

Ответ 1

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

$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

Ответ 2

использовать git merge-base A B

Ответ 3

git diff master...feature

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

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

git diff A...B

совпадает с:

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

но ... легче вводить и запоминать.

Как упоминалось от Dave, частный случай HEAD можно опустить. Итак:

git diff master...HEAD

совпадает с:

git diff master...

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

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

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

Ответ 4

Как отмечено в предыдущем ответе, 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) 

Ответ 5

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

gitk branch1 branch2

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

Ответ 6

После приобретения общий SHA-предк может использоваться, например, для просмотра доступных коммитов на пульте, например:

#!/bin/bash

git remote update
REMBR=`git show-remote-branch`
REMHEAD=`git rev-parse $REMBR`
MERGEBASE=`git merge-base HEAD $REMBR`
REMURL=`git config remote.origin.url`

git request-pull $MERGEBASE $REMURL $REMHEAD