【问题标题】:Get git diff for any merged branch获取任何合并分支的 git diff
【发布时间】:2012-06-10 05:46:02
【问题描述】:

对于代码中的每个缺陷,我都会创建单独的分支。修复缺陷后,我将这个分支合并到 master 中,所以我有如下图所示的历史记录(我们看到两个有修复的分支):

          defect1 fix         defect2 fix
         a---b---c---d           e---f
        /             \         /     \
---o---1---x---y---z---2---o---3---w---4---o--- 

问题是如何在任何时间点(例如,对于任何已关闭的缺陷)获取 fix1(分支开始 (1) 和分支结束 (2) 之间)或 fix2((3) 和 (4) 之间的差异)的差异过去)。

更新:实际问题是如何计算出 adef 的 SHA 总和,以执行下一个明显的差异命令 diff <commit> <commit>

【问题讨论】:

  • 就像评论一样。 Plastic SCM (www,plasticscm.com) 非常适合每个任务/缺陷模式的分支。使用塑料,您可以右键单击一个分支并按差异分支。使用命令行你可以做cm diff <branch_name>

标签: git version-control merge branch diff


【解决方案1】:

注意:这等价于“Not able to think of a case where git diff master..lab and git diff master...lab would be different”中详述的:

 git diff master...defect1-fix-branch

git diff A...B 等价于git diff $(git merge-base A B) B

(来自“git diff doesn't show enough”)

【讨论】:

    【解决方案2】:

    答案很简单:

    git diff 1..d
    

    这显示了defect1 fix 分支的分支点(即1)和它的结束点(即d)之间的差异。

    为了找到defect1 fix分支的开始,使用

    git merge-base master defect1-fix-branch
    

    如本答案所示:https://stackoverflow.com/a/2458173/520162.
    根据git merge-base 的文档,这会给你1

    defect1 fix 分支的末尾仅由其名称标识。因此,找到defect1 fix 中引入的所有差异,您需要这样做

    git diff 1..defect1-fix-branch
    

    【讨论】:

    • 对,我想在<SHAofa>..<SHAofd> 之间进行更改,问题是如果没有标记,如何找出adSHAs
    • 不应该是git diff <SHAof1>..<SHAofd>吗?因为您还想包含1a 的差异(这是分支开发的一部分)。
    • git merge-base master defect1-fix-branch 给了我a 而不是1 的sha。我必须做git diff a^..defect1-fix-branch,其中a 是我从git merge-base 得到的。 (注意a 后面的^
    • git merge-base master defect1-fix-branch 给出一个,而不是 1。不容易得到 2 个分支的最古老的祖先 stackoverflow.com/questions/1527234/…
    【解决方案3】:

    如果你想查看一个特性分支引入了哪些变化,在它被合并之后,你只需运行:

    git diff HEAD^..HEAD
    

    master 分支上。这显示了 HEAD(合并提交)的第一个父级和 HEAD 之间的差异,有效地显示了整个功能分支合并到主分支中的差异。

    没有必要让事情变得复杂:)

    【讨论】:

      【解决方案4】:

      怎么样:

      git diff <commit> <commit>
      

      其中提交参数是实际提交的 SHA 校验和。

      【讨论】:

      • 是的,但是如何计算这些提交的 SHA 校验和?
      • 您可以从git log查看它
      猜你喜欢
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 2023-03-06
      • 2015-07-31
      • 2019-08-22
      • 2021-03-20
      • 2018-08-06
      • 1970-01-01
      相关资源
      最近更新 更多