鉴于以下历史:
master A-B-C-D-E-F
\
topic G-H-I
我可以使用什么git命令来确定C
导致G
合并到master
?
换句话说,忽略分支名称:“我怎样才能确定哪个合并提交导致A在其祖先中有G?”
答案 0 :(得分:0)
git merge-base G master
给出了共同的祖先:
Find common ancestor of two git branches
我认为这可以回答您的第一个表述,但当您说“C
导致G
合并到master
”时,我可能无法理解您的意思。
答案 1 :(得分:0)
您可以从第一次提交开始,直到达到可以达到广受欢迎的提交的合并提交。通过使步行成为第一父步行,我们忽略了在分支中发生的所有提交。
使用How can I tell if one commit is a descendant of another commit?中描述的可访问性测试,以下示例查找将wanted
环境变量的内容标识的提交引入主分支的第一个合并提交:
for c in $(git rev-list --reverse --first-parent --merges master) ; do
test $(git merge-base $wanted $c) = $wanted && echo $c && break
done
对于Git 1.8.0及更高版本,新的--is-ancestor
选项可以稍微缩短命令:
for c in $(git rev-list --reverse --first-parent --merges master) ; do
git merge-base --is-ancestor $wanted $c && echo $c && break
done