找到两个提交的第一个普通孩子

bar*_*ara 8 git merge branch git-branch

           :
           A
T         / \
i        B   C
m        :   :
e        D   E
          \ /
|          F
V          :
Run Code Online (Sandbox Code Playgroud)

git merge-base B E允许查找A两个提交的共同祖先的位置.有没有办法找到F两个分支再次合并的提交?

pat*_*yts 1

哎呀。读得不够仔细。

提交中的唯一信息是其父级(或多个父级)的 id。您无法从父提交获取子项(这是存储库的有向部分,是 DAG)。

多看一下 - 看起来--ancestry-pathgit 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
Run Code Online (Sandbox Code Playgroud)

我们可以使用以下命令获取这两个提交的所有子项

git log --oneline --ancestry-path B..E
Run Code Online (Sandbox Code Playgroud)

如果你然后反转它并选择第一个——那就是F。

git rev-list --reverse --ancestry-path 28d08e5..006d11d | head -1
Run Code Online (Sandbox Code Playgroud)

就我而言,返回 3146e5d。