:
A
T /\
i B C
m : :
e D E
\/
| F
V :
git merge-base B E
允许找到两个提交的共同祖先A
的位置。有没有办法找到提交F
其中两个分支合并再次?查找两个提交的第一个共同子代
:
A
T /\
i B C
m : :
e D E
\/
| F
V :
git merge-base B E
允许找到两个提交的共同祖先A
的位置。有没有办法找到提交F
其中两个分支合并再次?查找两个提交的第一个共同子代
哎呀。没有仔细阅读。
在提交的唯一信息是它的父(或父母)的ID。你不能从父项的子犯(这是存储库是一个DAG的定向部分)。
看着这更多 - 它看起来像git log的--ancestry-path
选项可以做到这一点。比如给定:
* 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。
改编all.awk
从this answer也携带每个裁判的行号,然后当你遇到父母双方看他们共同的裁判。
那是一个真棒图形,并如何ü做的? –
如果有多个“第一”共同孩子会怎么样?例如,可能有一个提交是B和E的合并。 – svick
你可以像这个人那样破解'git rev-list --children'输出:http://stackoverflow.com/questions/1761825 /引用-的孩子对的一提交 - 在 - 饭桶。 – ellotheth