如何在git中找到两个提交的最老的共同后代?

时间:2015-09-18 10:38:51

标签: git git-merge git-rev-list

给定两个(或更多)提交,我想找到最老的合并加入它们。像git merge-base(找到最年轻的共同祖先)的反面词。

换句话说:我想调查合并提交,它合并了两个给定的提交(发生了对同一文件的更改)。

2 个答案:

答案 0 :(得分:0)

如果$ a和$ b是两个提交哈希,并且它们都包含在master中,则说

git rev-list $a..master --ancestry-path >a
git rev-list $b..master --ancestry-path >b

然后使用diff工具查找a b的最后一条公共线。

答案 1 :(得分:0)

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采用所有合并祖先列表中显示的第一个提交。