查看 git master 和 live 分支之间的提交日志
see git log of commits between master and live branch
我一直在 Whosebug 和其他论坛上寻找答案,但无济于事 - 似乎没有什么能完全符合我的要求。
所以问题如下:
我有一个 master-branch 和一个 live-branch。在 master-branch 上继续开发,当提交被认为合适时,它们会被挑选到 live-branch.
但是,我发现 live-branch 有一个错误,它在 master-branch 中修复了,我正在尝试找到 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 如果为空则忽略。
我该怎么做?
如果需要更多说明,我会更新。
(展开评论回答)
我想你可能想要 --cherry
,它是 --right-only --cherry-mark --no-merges
的同义词(请参阅 git log
或 git rev-list
文档),或者与 [=15 相同=](如您所试)而不是 --cherry-mark
。这些需要使用对称差分或三点符号,即 live-branch...master
.
当使用带有三点表示法的 --left-right
时,如果它们在 "left side" 上,您将获得带有 <
注释的提交哈希,如果它们在 >
上,则带有 >
注释在 "right side" 上。请记住,两个集合的对称差异意味着 元素属于任一集合,但不属于两个集合的并集 。当应用于 Git 个分支时,我们得到:
(left side) (right-side)
live-branch master
* *
| |
* X'
| |
: :
| |
X *
\ /
\ /
\ /
\ /
*
|
:
其中每个 *
或大写字母代表一些提交。这两个分支在某个时候汇集在一起,因此 left...right
查看所有提交 "above" 连接,并立即排除所有低于它的提交。 (连接点也被排除在外,因为它在两个集合中,尽管 --boundary
重新包含它。)
没关系,但我们想知道哪些提交是左侧提交,当然右侧提交也是如此。然后,使用 --cherry
或 --cherry-pick
或 --cherry-mark
,我们得到 Git 来分析左侧每个提交的 补丁等效性 和右侧。如果两个不同的提交哈希具有相同的计算 git patch-id
,这意味着一个可能是从另一个中挑选出来的,它们会链接在一起。例如在上图中,X 和 X' 是 "the same",因此它们是链接的。
各种 --cherry
选项的行为是以各种方式使用这些标记。您正在寻找 master
中存在但 live-branch
中不存在的提交,因此在标记对之后,您只需要右侧 (master
) 没有相应左侧 ( live-branch
) 提交。使用 --cherry-mark
,您会看到带有标记的它们;使用 --cherry-pick
、Git 将完全删除 marked/paired。
我一直在 Whosebug 和其他论坛上寻找答案,但无济于事 - 似乎没有什么能完全符合我的要求。
所以问题如下: 我有一个 master-branch 和一个 live-branch。在 master-branch 上继续开发,当提交被认为合适时,它们会被挑选到 live-branch.
但是,我发现 live-branch 有一个错误,它在 master-branch 中修复了,我正在尝试找到 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 如果为空则忽略。
我该怎么做?
如果需要更多说明,我会更新。
(展开评论回答)
我想你可能想要 --cherry
,它是 --right-only --cherry-mark --no-merges
的同义词(请参阅 git log
或 git rev-list
文档),或者与 [=15 相同=](如您所试)而不是 --cherry-mark
。这些需要使用对称差分或三点符号,即 live-branch...master
.
当使用带有三点表示法的 --left-right
时,如果它们在 "left side" 上,您将获得带有 <
注释的提交哈希,如果它们在 >
上,则带有 >
注释在 "right side" 上。请记住,两个集合的对称差异意味着 元素属于任一集合,但不属于两个集合的并集 。当应用于 Git 个分支时,我们得到:
(left side) (right-side)
live-branch master
* *
| |
* X'
| |
: :
| |
X *
\ /
\ /
\ /
\ /
*
|
:
其中每个 *
或大写字母代表一些提交。这两个分支在某个时候汇集在一起,因此 left...right
查看所有提交 "above" 连接,并立即排除所有低于它的提交。 (连接点也被排除在外,因为它在两个集合中,尽管 --boundary
重新包含它。)
没关系,但我们想知道哪些提交是左侧提交,当然右侧提交也是如此。然后,使用 --cherry
或 --cherry-pick
或 --cherry-mark
,我们得到 Git 来分析左侧每个提交的 补丁等效性 和右侧。如果两个不同的提交哈希具有相同的计算 git patch-id
,这意味着一个可能是从另一个中挑选出来的,它们会链接在一起。例如在上图中,X 和 X' 是 "the same",因此它们是链接的。
各种 --cherry
选项的行为是以各种方式使用这些标记。您正在寻找 master
中存在但 live-branch
中不存在的提交,因此在标记对之后,您只需要右侧 (master
) 没有相应左侧 ( live-branch
) 提交。使用 --cherry-mark
,您会看到带有标记的它们;使用 --cherry-pick
、Git 将完全删除 marked/paired。