Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在git中找到两个提交的最古老的共同后代?_Git_Git Merge_Git Rev List - Fatal编程技术网

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

如何在git中找到两个提交的最古老的共同后代?,git,git-merge,git-rev-list,Git,Git Merge,Git Rev List,给定两个(或更多)提交,我想找到连接它们的最早的合并。类似于git merge base的反面(它可以找到最年轻的共同祖先)。请注意,我正在寻找的提交将是开始提交的较年轻后代 换句话说:我想研究合并提交,它合并了两个给定的提交(其中发生了对同一文件的更改)。如果$a和$b是两个提交哈希,并且它们都包含在master中,那么说 git rev-list $a..master --ancestry-path >a git rev-list $b..master --ancestry-path

给定两个(或更多)提交,我想找到连接它们的最早的合并。类似于git merge base的反面(它可以找到最年轻的共同祖先)。请注意,我正在寻找的提交将是开始提交的较年轻后代


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

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

git rev-list $a..master --ancestry-path >a
git rev-list $b..master --ancestry-path >b
然后使用diff工具查找a和b的最后一条公共线

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

这不是您想要的吗@不,这个问题有一个分支,合并应该在哪里。(我还不知道哪个分支有我正在寻找的最早的合并提交。)我已经尝试过这个,当使用
cmp
进行比较时,我确实找到了一个常见的提交。但是,这不是既有
a
又有
b
提交更改的“最早的”/“最早的”公共提交。这甚至不是“最新的”/“最年轻的”犯罪。就在两者之间。不完全确定。