从Merged commit获取原始提交信息

时间:2014-12-30 13:31:11

标签: git git-merge jgit

我一直在查看log命令一整天,我仍然无法弄清楚如何获取在合并操作中合并的原始提交的提交哈希值。

(这可能听起来很神秘)

我想弄清楚的是,当我从分支1(提交有aaaa,bbbb,cccc)合并3次提交到master(或任何其他分支。而不是使用快进)时,我得到一个带有hash的新提交XYZ。现在使用xyz我如何找到哪些提交被合并为操作的一部分。 (类似于svn merge-info将给出的细节)

是否可以通过jGit获取此信息


澄清

下面的例子应该解释我试图解决的问题。 (例子来自下面的chepner答案)

情景1:

[Master] ---ma1 --- ma2 --- ma3 --- merg1 ---
              \                     /
               \                   /
[Branch]        br1 --- br2 --- br3 

现在使用sha merg1,我需要找出所有修订在这里合并的内容。即br1,br2& BR3

场景2:与上述相同但使用分叉

[Master]      ---ma1 --- ma2 --- ma3 --- merg1 ---
                                         /
                                        /
[fork master]        fr1 --- fr2 --- fr3 

现在使用sha merg1,我需要找出所有修订在这里合并的内容。即fr1,fr2& FR3

1 个答案:

答案 0 :(得分:1)

假设在合并之前你有类似的东西:

w---x---y---z (master)

aaaa---bbbb---cccc  (somebranch)

然后运行git merge somebranchmaster作为当前分支)生成

  w---x---y---z---xyz (master)
                 /
aaaa---bbbb---cccc (somebranch)

您可以使用^表示法来引用特定的父母。

  • master^1 = z
  • master^2 = cccc
  • master^2^ = bbbb

^1表示第一个父项(从合并时检出的分支中提交),^2表示第二个父项(合并分支的提交)。裸^^1相同。最后一个例子展示了它们如何叠加;如果master^2master的第二个父级,则master^2^master^2的第一个父级。


根据您的说明,您正在寻找show-branch命令。假设下图中的MB是合并基础,是mastersomebranch之间的最后一个共同祖先。

...---MB---w---x---y---z---xyz (master)
       \                  /
        aaaa---bbbb---cccc (somebranch)

要获得somebranch独有的三个提交,请使用

git show-branch --topics master^1 master^2

--topics选项省略了第一次提交可以访问的提交。使用--sha1-name选项查看每个提交的(缩写)哈希,而不是相对于master^2的名称。

这可能会为您提供超出您想要的输出。我不确定是否有办法将输出限制为只是提交哈希值。

相关问题