如何在Git中找到两个提交的最早公共祖先?

8

给定两个(或多个)提交,我想找到合并它们的最古老的合并记录。类似于git merge-base的相反操作(它查找最年轻的共同祖先)。请注意,我正在寻找的提交将是起始提交的较年轻后代。

换句话说:我想调查合并了两个给定提交的合并记录(其中对同一文件进行了更改)。


这不是你想要的吗?https://dev59.com/q2oy5IYBdhLWcg3wkOsK - smyatkin_max
@smyatkin_max 不,那个问题有一个分支,合并应该在那里进行。(我还不知道哪个分支有我正在寻找的最早的合并提交。) - Robert Siemer
2个回答

1
oldest-merge() { 
        ( for c; do git log --all --merges --ancestry-path ^$c --pretty='%aI %h %s'; done ) \
        | sort | uniq -c | awk "\$1 == $# {print;exit}"
}

oldest-merge `git rev-list --all --grep=BUG-27182`  # e.g. 

最终的awk命令获取了在所有合并祖先列表中出现的第一个提交。

默认情况下,输出是按照时间倒序给出的。 - rhinoceros.xn

0
如果$a和$b是两个提交哈希值,并且它们都包含在主分支中,则输出:
git rev-list $a..master --ancestry-path >a
git rev-list $b..master --ancestry-path >b

然后使用 diff 工具找到 a 和 b 的最后一个公共行。


我已经尝试过使用cmp进行比较,确实找到了一个共同的提交。然而,这不是同时具有ab提交更改的“最早”/“最老”的共同提交。它甚至也不是“最新”/“最年轻”的提交。它介于两者之间,但我并不完全确定。 - CMCDragonkai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接