383

How can I diff a file, say pom.xml, from the master branch to an arbitrary older version in Git?

4

13 回答 13

408

你可以做:

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

...将您的当前版本pom.xmlmaster20 年前通过第一个父版本的版本进行比较。当然,您可以将 替换master~20为提交的对象名称 (SHA1sum) 或指定修订的许多其他方式中的任何一种。

请注意,这实际上是将旧pom.xml版本与工作树中的版本进行比较,而不是在master. 如果你愿意,那么你可以改为执行以下操作:

git diff master~20:pom.xml master:pom.xml
于 2011-04-07T19:23:33.117 回答
166
git diff <revision> <path>

例如:

git diff b0d14a4 foobar.txt
于 2011-04-07T19:23:30.540 回答
52

如果您想查看单个文件的最后一次提交之间的差异,您可以执行以下操作:

git log -p -1 filename

这将为您提供 git 中文件的差异,而不是比较您的本地文件。

于 2012-08-29T17:18:06.583 回答
36

要查看上次提交中文件的更改内容:

git diff HEAD~1 path/to/file

您可以将数字 (~1) 更改为您想要比较的第 n 个提交。

于 2012-09-27T23:00:45.643 回答
9

通用语法:

$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 进行了测试。

于 2016-03-11T13:59:38.153 回答
7

为了将 5 提交与当前提交进行比较,两者都 on master,只需执行以下操作:

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

您也可以参考提交哈希数,例如如果哈希数是x110bd64,您可以执行以下操作来查看差异:

git diff x110bd64 pom.xml
于 2017-07-01T12:54:44.290 回答
7

如果两个提交都不是你的 HEAD,那么 bash 的大括号扩展证明真的很有用,特别是如果你的文件名很长,上面的例子:

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

会成为

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

更多关于使用 bash进行Brace 扩展的信息。

于 2017-06-20T11:31:29.873 回答
5
git diff -w HEAD origin/master path/to/file
于 2014-10-20T09:51:51.580 回答
2
git diff master~20 -- pom.xml

如果您不在 master 分支中也可以使用。

于 2017-03-24T13:08:13.023 回答
2

如果您可以使用图形工具(甚至更喜欢它),您可以:

gitk pom.xml

然后在 gitk 中,您可以单击任何提交(以“选择”它)并右键单击任何其他提交以在弹出菜单中选择“Diff this -> selected”或“Diff selected -> this”,具体取决于您喜欢的顺序。

于 2018-07-17T08:57:33.533 回答
0

对于有兴趣在 GitHub 上做同样事情的人,请参阅跨时间比较提交

于 2015-08-11T11:09:44.317 回答
0

例如,如果您需要对存储中的单个文件进行比较,您可以这样做

git diff stash@{0} -- path/to/file
于 2016-02-29T23:16:29.140 回答
-1

如果您正在寻找特定提交的差异并且您想使用 github UI 而不是命令行(假设您想将其链接到其他人),您可以执行以下操作:

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

请注意右上角的上一个和下一个链接,它们允许您浏览提交中的所有文件。

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

于 2017-02-08T22:12:22.197 回答