2011-04-07 69 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 
相關問題