2011-08-25 150 views
3

我經常需要找到一些我在老版本的腳本中編碼的東西,但我不知道何時。我通常會嘗試在日誌中尋找不同的版本,看看他們是否有變化,或者我只是放棄並嘗試其他的東西。有沒有辦法使用git來查看文件的所有版本?

將是特別有用什麼是輸出兩個日期或散列之間的文件的每一個版本的命令。然後,一個簡單的grep會發現我在找什麼。

它可能會工作是這樣的:

git showeverything d612905a..b39af32e /path/to/file /tmp/output 

回答

4

Git有這種情況的完美工具:git log -S這將搜索的改變,並只顯示那些提交

# search changes in all branches which touch the string $abc in a file 
git log -p -S'$abc' --all -- path/to/file 
+0

越來越近了,但我們仍然在處理changelog輸出。這很有用,但不像獲取與更改相關的完整原始文件一樣有用。主要的用例是這樣的:我寫了一個函數,決定不使用它,忘了我什麼時候寫它。幾個月後,我想起了這個名字,並希望爲這個功能記錄歷史,並輕鬆地剪切並粘貼它,而不用改變日誌的順序和缺點。 – Matt

+0

@Matt:首先使用'git log -S'查找提交,然後使用'git show '。我想有沒有簡單,直接和快速的方法來做到這一步 – knittl

0

我知道這可能不是你要找的答案,但託管網站/服務的每一個Git有一個漂亮的GUI做去翻提交歷史在存儲庫中的每個文件。我用了很多。

0

您可以使用git log [commit_range/dates/other_constraints] -- <filename(s)>顯示屬於特定文件中的所有更改日誌,你可以添加約束上的日期/款/等。以及。

使用git show <same stuff>實際顯示在每個階段的文件...

+0

這已經很接近,但我的是看到了一套完整的文件,而不是他們之間只是更改日誌真正感興趣的東西。 – Matt

+0

@knittl的anwser可能是你正在尋找的,然後 – johnny

0

git log file節目影響文件的所有提交的提交ID。

git show commitid:file打印的文件到標準輸出的相關版本的內容。

請注意,在git show命令中,如果您只是指定文件名相對於您的git存儲庫的根目錄,除非您指定了一個路徑,而不是指定到當前目錄。要顯示當前目錄下的文件:

git show commitid:./file*

+0

我認爲答案可能會是一個shell腳本,它需要git日誌輸出並通過git show提供它。 – Matt

相關問題