2012-03-24 191 views
14

我的項目有一個文件foo,我一直在使用它並使用git進行檢查。我只是做了一些重構,所以我不再需要該文件。如果我做git rm foo,該文件是否仍然存在於較舊的提交中?我能否檢出一個較舊的提交併使用該文件?git rm是否刪除文件的所有歷史記錄?

回答

19

不,git rm(加上提交)寫入反映文件不再存在的新樹。該文件的整個歷史記錄,包括創建,修改和最終刪除都存在於歷史記錄中。

+0

第一個字是不是應該是?他問他能否從以前的提交中獲取文件?你的意思是說是!對? – PHcoDer 2016-09-02 18:25:26

6

否,git rm將只從工作目錄中刪除文件並將該刪除添加到索引中。所以只有未來的提交會受到影響。以前的所有提交保持不變,當您從存儲庫中刪除文件時,歷史記錄將實際顯示。

一般來說,您之前提交的所有提交都是永久性的,所以您應該永遠不用擔心在提交歷史記錄時丟失提交。當然,有些事情可以刪除或更改以前的提交(如rebasing),但對於大多數事情,您都很安全。

+0

第一個詞不應該是?他問他能否從以前的提交中獲取文件?你的意思是說是!對? – PHcoDer 2016-09-02 18:25:22

+0

@PHC我(我也假設丹尼爾)在問題標題中回答了這個問題。所以,不,git rm不會刪除所有的歷史記錄。 – poke 2016-09-02 18:38:04

5
  1. 您將能夠使用已知提交ID來檢出任何舊版本,其中包含所有狀態都屬於它,包括現在被刪除的文件。見例如git分支<branchname> <起點>其中起點是提交ID。你甚至不應該追蹤屬於當前分支的那個起點;提交ID應該是唯一的,因此它可以位於當前存儲庫已知的任何分支中。

  2. 您可以使用log命令檢查文件的歷史記錄;但它不適用於任何語法 - 對於1.7.7,我將發佈「git log-oldpath」而不是簡單的「git log oldpath」,否則它將無法區分路徑和修訂版本。對於其他一些「責備」的命令,即使這還不夠 - 應該檢查舊版本以啓動它。

相關問題