请参阅master和live分支之间提交的git日志

时间:2017-06-13 23:18:25

标签: git github version-control diff git-diff

我一直在搜索stackoverflow和其他论坛以找到无济于事的答案 - 似乎没有什么比我想要的更合适。

所以问题如下: 我有一个主分支和一个实时分支 master-branch 继续开发,当提交被认为合适时,它们会被选入 live-branch

但是,我发现 live-branch 有一个错误,已在 master-branch 中修复,我试图在中查找哪个提交em> master-branch 引入了修复程序。

我试图通过首先看到master和live之间的提交差异来做到这一点。在master中的一些提交没有让它生效,哪些提交?

我尝试了以下内容:

git log --cherry-pick --oneline --no-merges --right-only live-branch..master

但是我并不是真的理解这个命令,这告诉我提交的区别,但是这给了我相同的提交,这些提交在live和master中,只是哈希是不同的。

我需要一种类似补丁的方式来做到这一点。 git diff commit_from_master,v3.8如果为空则忽略。

我该怎么做?

如果需要进一步澄清,我会更新。

1 个答案:

答案 0 :(得分:3)

(扩大评论以回答)

我认为您可能需要--cherry,这是--right-only --cherry-mark --no-merges的同义词(请参阅git loggit rev-list文档),或与--cherry-pick相同(正如您所尝试的那样)而不是--cherry-mark。这些要求使用对称差异或三点表示法,即live-branch...master

使用带有三点符号的--left-right时,如果它们位于“左侧”,则会使用<注释提交哈希值,如果它们位于“{1}}”右边”。请记住,两个集合的对称差异意味着元素是任一集合的成员,而不是两个集合的成员。当应用于Git分支时,我们得到:

>

其中每个 (left side) (right-side) live-branch master * * | | * X' | | : : | | X * \ / \ / \ / \ / * | : 或大写字母代表一些提交。这两个分支在某个时刻汇集在一起​​,因此*查看连接“上方”的所有提交,并简要地排除了它下面的所有提交。 (连接点也被排除在外,因为它在两个集合中,尽管left...right重新包含它。)

没关系,但我们想知道哪些提交是左侧提交,当然对于右侧提交也是如此。然后,使用--boundary--cherry--cherry-pick,我们让Git分析左侧和右侧每个提交的修补程序等效性。如果两个不同的提交哈希具有相同的计算--cherry-mark,意味着一个可能是从另一个中挑选出来的,它们会被链接在一起。例如,在上图中,X和X'是“相同的”,因此它们是相互关联的。

各种git patch-id选项的行为是以各种方式使用这些标记。您正在查找--cherry中但不存在于master中的提交,因此在标记对后,您只需要右侧(live-branch)提交没有相应的左侧( master)提交。使用live-branch,您可以看到标记;使用--cherry-mark,Git将完全删除已标记/配对的内容。

相关问题