我經常需要找到一些我在老版本的腳本中編碼的東西,但我不知道何時。我通常會嘗試在日誌中尋找不同的版本,看看他們是否有變化,或者我只是放棄並嘗試其他的東西。有沒有辦法使用git來查看文件的所有版本?
將是特別有用什麼是輸出兩個日期或散列之間的文件的每一個版本的命令。然後,一個簡單的grep會發現我在找什麼。
它可能會工作是這樣的:
git showeverything d612905a..b39af32e /path/to/file /tmp/output
我經常需要找到一些我在老版本的腳本中編碼的東西,但我不知道何時。我通常會嘗試在日誌中尋找不同的版本,看看他們是否有變化,或者我只是放棄並嘗試其他的東西。有沒有辦法使用git來查看文件的所有版本?
將是特別有用什麼是輸出兩個日期或散列之間的文件的每一個版本的命令。然後,一個簡單的grep會發現我在找什麼。
它可能會工作是這樣的:
git showeverything d612905a..b39af32e /path/to/file /tmp/output
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
我知道這可能不是你要找的答案,但託管網站/服務的每一個Git有一個漂亮的GUI做去翻提交歷史在存儲庫中的每個文件。我用了很多。
git log file
節目影響文件的所有提交的提交ID。
git show commitid:file
打印的文件到標準輸出的相關版本的內容。
請注意,在git show
命令中,如果您只是指定文件名相對於您的git存儲庫的根目錄,除非您指定了一個路徑,而不是指定到當前目錄。要顯示當前目錄下的文件:
git show commitid:./file*
我認爲答案可能會是一個shell腳本,它需要git日誌輸出並通過git show提供它。 – Matt
越來越近了,但我們仍然在處理changelog輸出。這很有用,但不像獲取與更改相關的完整原始文件一樣有用。主要的用例是這樣的:我寫了一個函數,決定不使用它,忘了我什麼時候寫它。幾個月後,我想起了這個名字,並希望爲這個功能記錄歷史,並輕鬆地剪切並粘貼它,而不用改變日誌的順序和缺點。 – Matt
@Matt:首先使用'git log -S'查找提交,然後使用'git show'。我想有沒有簡單,直接和快速的方法來做到這一步 –
knittl