2012-08-07 57 views
7

我正在從事一個git項目,並且我知道在過去的某個時間(很久以前我有代碼)存在一個名爲exec.js的文件。 我想查看這個文件的內容。 我知道哪個存儲庫用於包含此文件,但我不知道確切的路徑。搜索並查看從回購中刪除的文件

回答

3

你可以在git log使用通配符:

git log -- *exec.js 

會給你所有的日誌消息時被修改後的被叫exec.js的任何文件。

一旦你找到了刪除提交(比如A),你可以

git checkout A -- *exec.js 

這會給你帶來exec.js的最後一個版本。

如果你想查看的exec.js的全部歷史,你可以使用gitk

gitk -- *exec.js 

這將再次顯示所有的修改。如果您對一次提交特別感興趣,則可以右鍵單擊gitk對話框中的文件,然後選擇外部差異工具。這將打開完整文件的外部diff工具,而不僅僅是修補程序。

+0

您也可以執行** git diff * revision-before-delete * - * filepath ***以查看文件的完整內容。 (每行前面會有「 - 」,因爲每行都從文件中刪除。) – 2013-07-01 17:46:00

1

您可以使用該特定文件搜索歷史日誌內 -

如果沒有文件路徑,然後

git log --diff-filter=D --summary | grep filename 

如果你的文件路徑,那麼你可以使用 -

git log -- filepath 
git log -n 1 -- filepath 

一旦你得到修訂,你可以檢出該特定修訂版以獲取該文件

+0

你沒讀過的問題,不是嗎?他們說他們**不知道路徑。這是路徑過濾器。它需要路徑。因此沒用。 – 2012-08-07 11:58:02

+0

我不知道路徑,當文件被刪除時我沒有代碼。 – user429400 2012-08-07 12:08:32

+0

@JanHudec是的,但當然他必須有git版本庫路徑。user429400不是嗎? – 2012-08-07 12:35:12

0

有沒有簡單的方法來列出刪除的文件的全名及其內容在一個或兩個命令。但是,這裏有一個別名,讓你開始:

$ git config --global alias.find-deleted-file '!f() { for c in `git rev-list HEAD`; do for fnm in `git diff-tree -r --diff-filter=D --name-only $c | grep -P ".*/$1"` ; do echo "$c $fnm" ; git show $c^:$fnm ; echo "" ; done ; done ; } ; f' 

這將提供一個Git find-deleted-file別名,將已刪除的文件(使用diff-tree)與提供的文件名模式搜索(匹配由grep -P提供模式),顯示提交文件被刪除,文件的全名及其內容被刪除之前。

使用下面的例子庫歷史:

$ git log --all --graph --decorate --oneline --name-only 
* 3f3cba1 (HEAD, master) I 
I 
* 4c8b369 H 
E/H 
* a008343 rm F 
E/F 
* 525a127 FG 
E/F 
E/G 
* 3a10f93 initial 
A 
B 
C 
D 
E/F 

你會搜索刪除F文件中使用:

$ git find-deleted-file F 
a008343eec91fe917078209d44ae93ee72fc5acb E/F 
F