我一直在查看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
答案 0 :(得分:1)
假设在合并之前你有类似的东西:
w---x---y---z (master)
aaaa---bbbb---cccc (somebranch)
然后运行git merge somebranch
(master
作为当前分支)生成
w---x---y---z---xyz (master)
/
aaaa---bbbb---cccc (somebranch)
您可以使用^
表示法来引用特定的父母。
master^1
= z master^2
= cccc master^2^
= bbbb ^1
表示第一个父项(从合并时检出的分支中提交),^2
表示第二个父项(合并分支的提交)。裸^
与^1
相同。最后一个例子展示了它们如何叠加;如果master^2
是master
的第二个父级,则master^2^
是master^2
的第一个父级。
根据您的说明,您正在寻找show-branch
命令。假设下图中的MB
是合并基础,是master
和somebranch
之间的最后一个共同祖先。
...---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
的名称。
这可能会为您提供超出您想要的输出。我不确定是否有办法将输出限制为只是提交哈希值。