2012-06-06 2 views
7
  : 
      A 
T  /\ 
i  B C 
m  : : 
e  D E 
      \/
|   F 
V   : 

git merge-base B E позволяет найти, где общий предок A из двух коммитов. Есть ли способ найти фиксацию F, где две ветви снова объединены?Найти первого обычного ребенка из двух коммитов

+0

thats awesome graph, как вы это сделали? –

+1

Что делать, если существует более одного «первого» общего ребенка? Например, может быть коммит, который является слиянием B и E. – svick

+1

Вы можете взломать вывод 'git rev-list -children', что-то вроде этого парня: http://stackoverflow.com/questions/1761825/ссылки-заместитель ребенка из-а-фиксации в-мерзавца. – ellotheth

ответ

0

К сожалению. Не читал это достаточно внимательно.

Единственная информация в фиксации - это идентификатор ее родителя (или родителей). Вы не можете добраться до ребенка из родительского коммита (это направленная часть репозитория, являющегося DAG).

Глядя на это больше - похоже, что опция --ancestry-path для git log может это сделать. Например: данный

* 85d26ab When compiling vim, also compile & install gvim 
* 3146e5d Merge remote-tracking branch 'origin/devel' into deve 
|\ 
| * 28d08e5 rebasing-merge: specify all commits explicitly 
* | 006d11d Help 'file' find its magic file 
|/ 
* e68531d (tag: Git-1.7.6-preview20110720) Update submodules 

мы можем получить все дети этих двух фиксаций с помощью

git log --oneline --ancestry-path B..E 

если вы затем изменить это и обрывать первый - то есть F.

git rev-list --reverse --ancestry-path 28d08e5..006d11d | head -1 

в моем случае, что возвращает 3146e5d.

0

Adapt all.awk от this answer также должен содержать номер строки для каждого ref, тогда, когда вы столкнулись с обоими родителями, посмотрите на ссылки, которые они имеют вместе.

Смежные вопросы