如何比较来自两个不同分支的文件?

我有一个脚本,在一个分支工作正常,并在另一个打破。 我想看两个版本,看看有什么不同。 有没有办法做到这一点?

要清楚我不寻找一个比较工具(我使用超越比较)。 我正在寻找一个git diff命令,它允许我将主版本与我当前的分支版本进行比较,以查看发生了什么变化。 我不是在合并或任何事情中。 我只想说一些像

git diff mybranch/myfile.cs master/myfile.cs 

git diff可以显示两个提交之间的区别:

 git diff mybranch master -- myfile.cs 

或者等同地:

 git diff mybranch..master -- myfile.cs 

使用后者的语法,如果任何一方是HEAD它可能被省略(例如, master..比较master HEAD )。

你也可能对mybranch...master感兴趣mybranch...master (来自git diff docs ):

这种forms是查看包含第二个<commit>的分支上的更改,从两个<commit>的共同祖先开始。 git diff A...B相当于git diff $(git-merge-base AB) B

换句话说,由于它与mybranch ((但是从mybranch开始就没有新的变化),所以这会对master进行变化。


在所有情况下,文件名前面的--分隔符表示命令行标志的结束。 这是可选的,除非Git会混淆如果参数引用一个提交或一个文件,但包括它不是一个坏习惯进入。 有关几个示例,请参阅https://stackoverflow.com/a/13321491/54249


如果你有一个configuration,可以将相同的parameter passing给git difftool

你可以这样做: git diff branch1:file branch2:file

如果你configuration了difftool,那么你也可以: git difftool branch1:file branch2:file

相关问题: 如何用visual diff程序查看git diff输出

更现代的语法:

git diff ..master path/to/file

双点前缀表示“从当前工作目录到”。 你也可以说:

  • master.. ,即与上述相反。 这和master
  • mybranch..master ,明确引用除当前工作树以外的状态。
  • v2.0.1..master ,即引用一个标签。
  • [refspec]..[refspec] ,基本上任何可识别的代码状态来混帐。

我只是做的git diff branch1 branch2 path/to/file

这将检查文件之间的差异。 branch1更改将显示为红色。 branch2更改branch2绿色。

假设branch1是过去的, branch2是未来的。 你可以通过在diff: git diff branch2 branch1颠倒分支的顺序来逆转

同意@dahlbyk提出的答案。 如果您想将差异写入代码评估的差异文件,请使用以下命令。

 git diff branch master -- filepath/filename.extension > filename.diff --cached