如何將一個文件(比如pom.xml
)從主分支轉換爲Git中的任意舊版本?如何區分一個文件到Git中的任意版本?
回答
你可以這樣做:
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
git diff <revision> <path>
例如:
git diff b0d14a4 foobar.txt
不適用於版本1.7.11如果文件不在當前目錄中。例如:'git diff f76d078 test/Config'產生「錯誤:無法訪問'test/f76d078'」 – simpleuser 2013-12-04 21:21:58
@ user1663987只傳遞一個相對於項目根目錄的完整路徑:'git diff
test/Config *是*相對於根目錄(因爲test是根目錄的子目錄)。但那麼你的例子根/路徑/文件似乎包含根? – simpleuser 2014-06-29 05:55:09
如果你想看到最後的區別提交一個文件,你可以這樣做:
git log -p -1 filename
這會給你git中文件的差異,並不是比較你的本地文件。
這不會返回任何東西 – 2014-10-17 12:05:15
@AndreiCristianProdan然後你沒有改變那裏。您可以逐步增加'-1',直到獲得更改。 – kaiser 2014-10-30 11:30:54
看看發生了什麼在一個文件中改變了過去的承諾:
git diff HEAD~1 path/to/file.
您可以更改數字(約1)至第n個承諾要與把分差
這個答案實際上只是[這個更一般的答案](http://stackoverflow.com/a/5586434/456814)的一個特例,其中'HEAD〜1'代替了'
這不行! 致命:模糊論點'HEAD〜1':未知版本或路徑不在工作樹中。 使用' - '分隔修訂版本的路徑 – 2014-10-17 12:04:16
git的差異-w HEAD產地/主路徑/到/文件
對於有意從GitHub做同樣的人,看到comparing commits across time。
如果您需要diff的在例如一個存儲一個文件,你可以做
git diff [email protected]{0} -- path/to/file
通用語法:
$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進行測試。
如果你正在尋找一個特定的DIFF承諾,並要使用GitHub的用戶界面,而不是命令行(說你要鏈接到其他人)的,你可以這樣做:
https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file>
例如:
注意在右上角的上一頁和下一頁鏈接,讓您通過在提交的所有文件瀏覽。
這隻適用於特定的提交,但不適用於任何兩個任意版本之間的比較。
git diff master~20 -- pom.xml
如果你不在主分支也可以工作。
如果沒有提交你的腦袋,然後bash的括號擴展證明非常有用的,特別是如果你的文件名很長,上面的例子:
git diff master~20:pom.xml master:pom.xml
將成爲
git diff {master~20,master}:pom.xml
更多Brace expansion與bash。
爲了比較,以5提交到當前,無論在master
,只是簡單地做:
git diff master~5:pom.xml master:pom.xml
你也可以參考提交哈希數字,例如,如果哈希號碼是x110bd64
,你可以做這樣看到的差異:
git diff x110bd64 pom.xml
- 1. 如何區分git中特定版本的文件?
- 2. 如何合併一個Git分支到多個版本分支
- 3. 如何將git文件恢復到其暫存區版本?
- 4. 在git分支中'固定'一個文件的特定版本
- 5. 如何拉取(簽出)Git版本控制中的任何一組文件?
- 6. 如何一個git子模塊的文件夾`.git`發送到父版本庫git的`/模塊/`文件夾?
- 7. Git版本分別控制版本庫中的文件
- 8. 如何在過去的兩個任意版本之間注入一個版本?
- 9. 一個人如何檢出一個版本的git一個二進制文件?
- 10. git將舊版本庫的一部分移動到一個新的版本庫
- 11. 對於一個文件,我該如何回到以前的Git版本?
- 12. git如何管理其文件版本?
- 13. 多個文件版本的git-LFS
- 14. 是否有可能使用Git找到兩個任意文本文件之間的區別?
- 15. 如何將集合分區爲任意大小的分區
- 16. 如何區分一個文件與內容相同的文件修改後,使文件版本的Java
- 17. Git:將舊版本的文件應用到分支
- 18. 如何將舊版本合併到git中分支的頭部?
- 19. 在git中,我如何找到創建分支的版本?
- 20. 如何將非版本控制的分支導入到git中?
- 21. 如何比較任意版本號?
- 22. SonarQube:我如何比較任意版本?
- 23. 如何在一個版本中確定文件的文本塊來自以前版本中的哪個文件?
- 24. GIT版本庫中的GIT分支版本
- 25. 幾個版本到一個jar文件
- 26. 在git倉庫中創建一個文件的每個版本的副本
- 27. Vim分步說明:如何通過任意分隔符排列任意文本?
- 28. 如何比較SonarQube中同一項目的兩個任意版本
- 29. 如何將版本化文件手動移動到git(版本控制)?
- 30. git bundle版本庫的一部分
請注意,這不僅適用於文件,它也適用於(子)目錄,例如'git diff:foo/HEAD:foo /'。 –
2014-07-05 18:59:59
另請注意,如果您使用的是版本說明符,那麼在Windows上您需要使用正斜槓作爲目錄,否則git會給出關於該版本中不存在的文件/目錄的錯誤。 – 2014-11-21 13:38:11
@DylanNissley或它會給你沒有錯誤,沒有差異。這就是我所看到的。無論如何,感謝您使用正斜槓而不是反斜槓的提示。 – 2017-08-17 20:05:24