如何比较来自两个不同分支的文件?
我有一个脚本,在一个分支工作正常,并在另一个打破。 我想看两个版本,看看有什么不同。 有没有办法做到这一点?
要清楚我不寻找一个比较工具(我使用超越比较)。 我正在寻找一个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