我一直在搜索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如果为空则忽略。
我该怎么做?
如果需要进一步澄清,我会更新。
答案 0 :(得分:3)
(扩大评论以回答)
我认为您可能需要--cherry
,这是--right-only --cherry-mark --no-merges
的同义词(请参阅git log
或git 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将完全删除已标记/配对的内容。