想象一下下面的历史:
c---e---g--- feature
/ \
-a---b---d---f---h--- master
我怎么能找到当提交“c”已合并到主(即,找到合并提交“h”)?
想象一下下面的历史:
c---e---g--- feature
/ \
-a---b---d---f---h--- master
我怎么能找到当提交“c”已合并到主(即,找到合并提交“h”)?
当前回答
你可以尝试这样做。这个想法是遍历所有的合并提交,看看是否可以从其中一个提交“c”到:
$ git log --merges --format='%h' master | while read mergecommit; do
if git log --format='%h' $mergecommit|grep -q $c; then
echo $mergecommit;
break
fi
done
其他回答
我不得不这样做了好几次(感谢每个回答这个问题的人!),最后写了一个脚本(使用Gauthier的方法),可以将它添加到我的git实用程序的小集合中。你可以在这里找到它:https://github.com/mwoehlke/git-utils/blob/master/bin/git-merge-point。
基于Gauthier的回答,我们不需要使用comm来比较列表。因为我们在——ancestry-path中寻找最后一个结果,它也在——first-parent中,我们可以简单地在前者的输出中grep后者:
git rev-list <SHA>..master --ancestry-path | grep -f <(git rev-list <SHA>..master --first-parent) | tail -1
或者为了更简洁和可重用,这里有一个可以弹出到.bashrc的函数:
function git-find-merge() {
git rev-list $1..master --ancestry-path | grep -f <(git rev-list $1..master --first-parent) | tail -1
}
我需要这样做,并以某种方式找到了git-when-merged(它实际上引用了这个SO问题,但Michael Haggerty从未在这里添加对他非常出色的Python脚本的引用)。现在我有了。
你可以尝试这样做。这个想法是遍历所有的合并提交,看看是否可以从其中一个提交“c”到:
$ git log --merges --format='%h' master | while read mergecommit; do
if git log --format='%h' $mergecommit|grep -q $c; then
echo $mergecommit;
break
fi
done
Git-get-merge将定位并显示你正在寻找的合并提交:
pip install git-get-merge
git get-merge <SHA-1>
该命令跟随给定提交的子分支,直到发现合并到另一个分支(假设是主分支)。