自从master分支以来如何git diff所有更改?

时间:2015-12-15 00:59:33

标签: git git-diff

我在我的分支上做了几次提交,现在我要看到从master分支时的变化。然而,由于我最初将其他分支合并在一起,因此不是现在的主人。因为我最初分支了它。

类似于 Show all commits in a git branch since original branching point from master但这与日志有关。

我确实尝试了

git diff  --boundary master..

但我仍然看到了比我更多的变化。

修改 我真的希望有一种不需要任何SHA知识或者提交了多少次提交的方法。如果我不需要它们,我可以自动化,自动化,自动化,使其更容易和无故障。

git diff my_branch_name...master

似乎接近但不正确。

3 个答案:

答案 0 :(得分:17)

作为Jonathan Brink already noted,听起来您想要将合并库提交下存储的版本与您自己分支顶端的版本进行比较。

使用git merge-base --fork-point通常是矫枉过正(在git 1.9之前的旧版git上不可用)。它处理其他分支本身已经重新定位的情况,所以如果没有发生,你可以坚持使用gitrevisions中更简单的三点语法:

git diff master...my_branch_name

(正如您在评论中所述)也可以使用HEAD或最后的空字符串来编写:

git diff master...

当你使用三个点时,git diff在左侧和右侧提交SHA-1之间找到 1 合并库(从名称中获取,或默认为{{1} })并将其替换为左侧SHA-1。右侧SHA-1(从名称解析)保持不变。

请注意,这与双点语法不同,HEAD接管两种语法(合成词?no, syntaxes),因此两者都没有 - 通常的gitrevisions意思。

1 如果有多个合并库,则只选择其中一个。实际git diff将(如果您使用默认的“递归”策略)合并两个“最佳”合并库以获得“虚拟合并基础”,然后使用它合并到您当前的git merge提交。这种情况非常罕见。

答案 1 :(得分:4)

使用merge-base确定fork发生的位置,并将其传递给diff:

git diff `git merge-base --fork-point master`
  

- 叉点
  找到从另一个分支(或任何引用)分叉的分支(或任何导致< commit>的历史记录)的点   < REF取代。这不只是寻找两者的共同祖先   提交,但也考虑了< ref>的reflog。看看是否   导致< commit>的历史从早期的化身分裂而来   分支< ref> (见下面关于这种模式的讨论)。

你可以用这样的别名包装它:

git config --global alias.sincemaster '!git diff `git merge-base --fork-point master`'

答案 2 :(得分:0)

如果你知道两个项目分歧的提交的sha值,你可以简单地运行: git diff <sha>