【问题标题】:see git log of commits between master and live branch查看 master 和 live 分支之间提交的 git log
【发布时间】:2017-11-15 21:53:50
【问题描述】:

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

所以问题如下: 我有一个 master-branch 和一个 live-branchmaster-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 如果为空则忽略。

我该怎么做?

如果需要更多说明,我会更新。

【问题讨论】:

  • 考虑使用git bisect
  • 这将花费太长时间,这是一个需要数小时才能编译的大型项目,需要提交差异...
  • --right-only 需要使用三点表示法,live-branch...mastermaster...live-branch--cherry-pick--cherry-mark 也是如此。但是,如果有修复特定错误的特定提交,@TimBiegeleisen 是对的,git bisect 是找到它的方法。
  • --cherry-pick 适用于对称差分切片、三个点、live-branch...master,而不是单边差分两点切片。
  • @torek 我想你刚刚回答了我的问题,我没有做三点符号

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


【解决方案1】:

(扩展评论以回答)

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

--left-right 与三点符号一起使用时,如果提交哈希在“左侧”,则使用< 注释,如果在“右侧”,则使用> 注释。请记住,两个集合的对称差意味着元素是任一集合的成员,而不是两个集合的并集的成员。当应用于 Git 分支时,我们得到:

    (left side)    (right-side)
    live-branch       master

            *         *
            |         |
            *         X'
            |         |
            :         :
            |         |
            X         *
             \       /
              \     /
               \   /
                \ /
                 *
                 |
                 :

每个* 或大写字母代表一些提交。这两个分支在某个时候会聚在一起,因此left...right 查看连接“上方”的所有提交,并汇总排除其下方的所有提交。 (连接点也被排除在外,因为它在两个集合中,尽管--boundary 重新包含它。)

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

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

【讨论】:

    猜你喜欢
    • 2012-12-07
    • 2021-11-06
    • 2023-03-15
    • 2019-12-15
    • 2015-11-18
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多