如何验证git合并不包含额外的更改?

时间:2014-11-28 07:02:48

标签: git security merge data-integrity integrity

在git中,如何验证merge upstream master提交不包含任何其他差异?假设我想验证该人没有做任何'偷偷摸摸'的事情,除了实际合并来自上游主分支的更改。

我想验证唯一的差异来自他们提出的其他提交;他们没有执行'evil merge'

有没有办法验证合并步骤中是否没有进行其他更改?
或者更好:向我展示潜在的'邪恶合并'差异所以我可以亲眼看看可能做了多少额外的工作?

示例场景:

          P1---P2   P3---P4---P5---P6
         /       \  /        /       \
    A---B---C---D--E--------F---------G master
                    \      /
                     C1---C2

P1..P2: First pull request
C1..C2: My working branch
P3..P4: More work done inbetween
P5: The commit that merges in master branch changes
P6: More regular work
  1. 有人向我的仓库发送拉取请求(P1..P2
  2. 拉取请求太棒了,我合并了它(E
  3. 我做了一些进一步的开发(C1..C2),将我自己的分支集成到主(F),然后发布
  4. 另一个人在此期间做了更多工作(P3..P4
  5. 他们将上游更改合并到其本地仓库(P5),进行更多更改(P6),然后发送第二个拉取请求
  6. 我可以验证他们在合并期间没有潜入任何额外的差异(P5)吗?

1 个答案:

答案 0 :(得分:1)

您可以通过执行diff的diff来检查git merge commit是否包含任何其他更改。这是一种方式。

          P1---P2   P3---P4---P5---P6
         /       \  /        /       \
    A---B---C---D--E--------F---------G master
                    \      /
                     C1---C2
  1. 计算原始公共父E与合并之前的主分支提交之间的主分支中所有更改的差异,F

      

    git diff E F> master_changes_to_merge.txt

  2. 计算主人'合并中所有变化的差异。提交,P5

      

    git diff P4 P5> master_changes_actually_merged.txt

  3. 区分那些:

      

    diff master_changes_to_merge.txt master_changes_actually_merged.txt

  4. 如果步骤3显示没有输出,则不应该有恶意合并更改。