想象一下下面的历史:
c---e---g--- feature
/ \
-a---b---d---f---h--- master
我怎么能找到当提交“c”已合并到主(即,找到合并提交“h”)?
想象一下下面的历史:
c---e---g--- feature
/ \
-a---b---d---f---h--- master
我怎么能找到当提交“c”已合并到主(即,找到合并提交“h”)?
当前回答
您的示例显示分支特性仍然可用。
在这种情况下,h是最后的结果:
git log master ^feature --ancestry-path
如果分支特性不再可用,你可以在c和master之间的历史行中显示合并提交:
git log <SHA-1_for_c>..master --ancestry-path --merges
然而,这也将显示所有发生在h之后的合并,以及在e和g之间的特征。
比较以下命令的结果:
git rev-list <SHA-1_for_c>..master --ancestry-path
git rev-list <SHA-1_for_c>..master --first-parent
会得到h的SHA-1作为最后一行。
如果有可用的,可以在这些结果上使用comm -1 -2。如果你在msysgit上,你可以使用下面的perl代码进行比较:
perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/' file1 file2
(perl代码来自http://www.cyberciti.biz/faq/command-to-display-lines-common-in-files/,这是从“comp.com .unix.shell新闻组的某人”)。
如果要使其成为一行程序,请参阅流程替换。
其他回答
对于Ruby人群来说,有git- where。非常容易。
$ gem install git-whence
$ git whence 1234567
234557 Merge pull request #203 from branch/pathway
这是在master中找到commit的最好方法:
[alias]
find-merge = !"f() { git rev-list $1..master --ancestry-path --merges --reverse | head -1; }; f"
我不得不这样做了好几次(感谢每个回答这个问题的人!),最后写了一个脚本(使用Gauthier的方法),可以将它添加到我的git实用程序的小集合中。你可以在这里找到它:https://github.com/mwoehlke/git-utils/blob/master/bin/git-merge-point。
git log --topo-order
然后在提交之前寻找第一个合并。
Git-get-merge将定位并显示你正在寻找的合并提交:
pip install git-get-merge
git get-merge <SHA-1>
该命令跟随给定提交的子分支,直到发现合并到另一个分支(假设是主分支)。