Как найти последнее совместное предсказание предка из двух ветвей 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