将文件的当前工作副本与另一个分支的已提交副本进行比较


158

foo在master分支中有一个带有文件的仓库。我切换到bar分支并对进行了一些更改foo。现在如何git diff在此副本(尚未提交)和master分支的副本之间运行a ?

Answers:


151

以下对我有用:

git diff master:foo foo

在过去,可能是:

git diff foo master:foo


9
每次我看到有关你的答案git diff,我总是想起stackoverflow.com/questions/5256249/git-diff-doesnt-show-enough/...
VonC

@VonC:谢谢,很高兴知道值得一提这些:)顺便说一句,您碰巧了解我更新答案的奇怪之处吗?
Mark Longair

2
您是否尝试过使用a --以便将参数与路径参数分开?git diff -- master:foo foo
VonC'2

1
在1.8上,git diff -- master:foo foo它不起作用-似乎将arg master:foo视为不存在的文件名(并且将其忽略),而不是分支文件。尝试切换最后2个args-如果可行,则diff比较应该反转,但输出不会改变。
开尔文

9
对我来说是相反的-我可以做git diff master:foo foo,反之亦然。我也不明白。使用git 1.7.9.5 / Ubuntu 12.04,我至少可以做得到git diff -R master:foo foo我真正想要的差异。当我尝试使用msysgit 1.9.4 / Windows 7 x64时,我得到了fatal: unable to read 0000000000000000000000000000000000000000。没有-R我,我得到与git 1.7.9.5相同的错误消息,但是有了1.9.4我得到了fatal: master:foo: no such path in the working tree
JMM

100

您正在尝试将工作树与特定分支名称进行比较,因此您需要这样做:

git diff master -- foo

这是来自git-diff的这种形式(请参见git-diff手册页)

   git diff [--options] <commit> [--] [<path>...]
       This form is to view the changes you have in your working tree
       relative to the named <commit>. You can use HEAD to compare it with
       the latest commit, or a branch name to compare with the tip of a
       different branch.

仅供参考,还有一个--cached(aka --staged)选项用于查看您已上演的内容的差异,而不是工作树中的所有内容:

   git diff [--options] --cached [<commit>] [--] [<path>...]
       This form is to view the changes you staged for the next commit
       relative to the named <commit>.
       ...
       --staged is a synonym of --cached.

2
谢谢。不知道为什么,但是只有这个答案对Linux中的git 1.8.1有用。
2014年

非常好,谢谢。我很想在diff命令中包含当前分支的名称,但是我发现并不需要。
yoyo 2015年

几个月前,这对我有用,但现在似乎不起作用。目前我使用的是git版本2.7.4(Apple Git-66);我不知道以前有什么
hBrent

@hBrent在OS X 10.11和git 2.7.3上仍然适用于我。如果有用的话,这是一个快速的示例仓库
Jordan Brough

谢谢@JordanBrough。
hBrent

14

也: git diff master..feature foo

由于git diff foo master:foo不适用于我的目录。


我也不。是Windows的东西吗?
Scott Stafford

@ScottStafford我在Ubuntu上,所以不,这似乎不是Windows。
ArtBIT

只要我明确给出两个分支名称(Windows)git diff branch1:foo master:foo
便

12
git difftool tag/branch filename

这是唯一对我有用的答案,用于在文件的本地工作副本和远程存储库(不是“源”)中的文件版本之间进行比较。谢谢,阿迪尔和巴兹
鼠标

git difftool-v根据docs git-scm.com/docs/git-difftool没有选择。你是说-y
ks1322 '19

10
git diff mybranch master -- file

应该也可以


4
这仅适用于提交到mybranch的文件,不适用于该文件的当前工作副本。
yoyo 2015年

上面的“-”是什么意思
Pushparaj

这样可以在两个方向进行比较:git diff deployment master -- file并且git diff master deployment -- file可以与任意两个分支正常工作。
viktorkho

0

要查看本地更改,请与您当前的分支进行比较

git diff .

要查看本地更改与其他任何现有分支的比较

git diff <branch-name> .

查看特定文件的更改

git diff <branch-name> -- <file-path>

确保您git fetch一开始就运行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.