想象一下下面的历史:
c---e---g--- feature
/ \
-a---b---d---f---h--- master
我怎样才能发现提交"c“已经合并到master (即,找到合并提交"h")?
发布于 2011-12-13 16:36:02
您的示例显示分支feature
仍然可用。
在这种情况下,h
是最后的结果:
git log master ^feature --ancestry-path
如果分支feature
不再可用,您可以在c
和master
之间的历史记录行中显示合并提交
git log <SHA-1_for_c>..master --ancestry-path --merges
然而,这也将显示在h
之后发生的所有合并,以及e
和feature
上的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
(来自http://www.cyberciti.biz/faq/command-to-display-lines-common-in-files/的perl代码,摘自“comp.unix.shell新闻组的某个人”)。
如果您想让它成为一行程序,请参阅process substitution。
发布于 2015-06-23 08:48:57
将此代码添加到您的~/.gitconfig
[alias]
find-merge = "!sh -c 'commit=$0 && branch=${1:-HEAD} && (git rev-list $commit..$branch --ancestry-path | cat -n; git rev-list $commit..$branch --first-parent | cat -n) | sort -k2 -s | uniq -f1 -d | sort -n | tail -1 | cut -f2'"
show-merge = "!sh -c 'merge=$(git find-merge $0 $1) && [ -n \"$merge\" ] && git show $merge'"
然后您可以像这样使用别名:
# current branch
git find-merge <SHA-1>
# specify master
git find-merge <SHA-1> master
要查看合并提交的消息和其他详细信息,请使用带有相同参数的git show-merge
。
(基于Gauthier's answer。感谢Rosen Matev和javabrett纠正了sort
的一个问题。)
发布于 2013-03-03 00:12:10
git-get-merge将定位并显示您正在查找的合并提交:
pip install git-get-merge
git get-merge <SHA-1>
该命令跟随给定commit的子级,直到找到与另一个分支(假设是主分支)的合并。
https://stackoverflow.com/questions/8475448
复制相似问题