如何在git中找到两个提交的最古老的共同后代?
给定两个(或更多)提交,我想找到连接它们的最早的合并。类似于git merge base的反面(它可以找到最年轻的共同祖先)。请注意,我正在寻找的提交将是开始提交的较年轻后代如何在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
换句话说:我想研究合并提交,它合并了两个给定的提交(其中发生了对同一文件的更改)。如果$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
提交更改的“最早的”/“最早的”公共提交。这甚至不是“最新的”/“最年轻的”犯罪。就在两者之间。不完全确定。