2011-04-07 67 views

回答

232

你可以这样做:

git diff master~20:pom.xml pom.xml 

...比较当前的pom.xml通过第一个父一个从master 20次年前修订。当然,您可以将master~20替换为提交的对象名称(SHA1sum)或任何many other ways of specifying a revision

请注意,这实际上是将旧的pom.xml与工作树中的版本进行比较,而不是在master中提交的版本。如果你想要的,那么你可以做以下代替:

git diff master~20:pom.xml master:pom.xml 
+8

请注意,这不仅适用于文件,它也适用于(子)目录,例如'git diff :foo/HEAD:foo /'。 – 2014-07-05 18:59:59

+2

另请注意,如果您使用的是版本说明符,那么在Windows上您需要使用正斜杠作为目录,否则git会给出关于该版本中不存在的文件/目录的错误。 – 2014-11-21 13:38:11

+1

@DylanNissley或它会给你没有错误,没有差异。这就是我所看到的。无论如何,感谢您使用正斜杠而不是反斜杠的提示。 – 2017-08-17 20:05:24

107
git diff <revision> <path> 

例如:

git diff b0d14a4 foobar.txt 
+0

不适用于版本1.7.11如果文件不在当前目录中。例如:'git diff f76d078 test/Config'产生“错误:无法访问'test/f76d078'” – simpleuser 2013-12-04 21:21:58

+1

@ user1663987只传递一个相对于项目根目录的完整路径:'git diff root/path/file'。 – 2014-06-27 17:23:06

+1

test/Config *是*相对于根目录(因为test是根目录的子目录)。但那么你的例子根/路径/文件似乎包含根? – simpleuser 2014-06-29 05:55:09

30

如果你想看到最后的区别提交一个文件,你可以这样做:

git log -p -1 filename 

这会给你git中文件的差异,并不是比较你的本地文件。

+0

这不会返回任何东西 – 2014-10-17 12:05:15

+0

@AndreiCristianProdan然后你没有改变那里。您可以逐步增加'-1',直到获得更改。 – kaiser 2014-10-30 11:30:54

13

看看发生了什么在一个文件中改变了过去的承诺:

git diff HEAD~1 path/to/file. 

您可以更改数字(约1)至第n个承诺要与把分差

+0

这个答案实际上只是[这个更一般的答案](http://stackoverflow.com/a/5586434/456814)的一个特例,其中'HEAD〜1'代替了'',这使得这个答案是重复。 – 2014-07-17 21:52:10

+1

这不行! 致命:模糊论点'HEAD〜1':未知版本或路径不在工作树中。 使用' - '分隔修订版本的路径 – 2014-10-17 12:04:16

4

git的差异-w HEAD产地/主路径/到/文件

2

通用语法:

$git diff oldCommit..newCommit -- **FileName.xml > ~/diff.txt 

名为“filename.xml中”所有文件的任何地方在你的回购。

公告之间的空间 “ - ” 和 “**”

回答你的问题:

$git checkout master 
$git diff oldCommit..HEAD -- **pom.xml 
or 
$git diff oldCommit..HEAD -- relative/path/to/pom.xml 

一如既往地与git的,你也可以用tag/SHA1 /“HEAD ^“来确认提交。

在Ubuntu上使用git 1.9.1进行测试。

0

如果你正在寻找一个特定的DIFF承诺,并要使用GitHub的用户界面,而不是命令行(说你要链接到其他人)的,你可以这样做:

https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file> 

例如:

https://github.com/grails/grails-core/commit/02942c5b4d832b856fbc04c186f1d02416895a7e/grails-test-suite-uber/build.gradle

注意在右上角的上一页和下一页链接,让您通过在提交的所有文件浏览。

这只适用于特定的提交,但不适用于任何两个任意版本之间的比较。

0
git diff master~20 -- pom.xml 

如果你不在主分支也可以工作。

3

如果没有提交你的脑袋,然后bash的括号扩展证明非常有用的,特别是如果你的文件名很长,上面的例子:

git diff master~20:pom.xml master:pom.xml 

将成为

git diff {master~20,master}:pom.xml 

更多Brace expansion与bash。

1

为了比较,以5提交到当前,无论在master,只是简单地做:

git diff master~5:pom.xml master:pom.xml 

你也可以参考提交哈希数字,例如,如果哈希号码是x110bd64,你可以做这样看到的差异:

git diff x110bd64 pom.xml 
相关问题