确定哪个合并提交导致特定提交合并到我的分支中

时间:2014-01-04 14:44:03

标签: git merge command-line-interface commit

鉴于以下历史:

master  A-B-C-D-E-F
             \
topic         G-H-I

我可以使用什么git命令来确定C导致G合并到master

换句话说,忽略分支名称:“我怎样才能确定哪个合并提交导致A在其祖先中有G?”

2 个答案:

答案 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