當您通過運行git rm
命令從項目中刪除文件時,文件實際上何時從索引中刪除?當您提交刪除時將其刪除,或在git rm
運行時刪除?當您運行git rm時,該文件何時從索引中刪除?
從我的理解,一個git RM包括以下步驟:從工作目錄
- 刪除文件提交的文件刪除
我只是不確定該文件是從索引開始刪除還是刪除提交。這些步驟是否正確?
當您通過運行git rm
命令從項目中刪除文件時,文件實際上何時從索引中刪除?當您提交刪除時將其刪除,或在git rm
運行時刪除?當您運行git rm時,該文件何時從索引中刪除?
從我的理解,一個git RM包括以下步驟:從工作目錄
我只是不確定該文件是從索引開始刪除還是刪除提交。這些步驟是否正確?
它立即發生,但在這一點上沒有任何承諾。也就是說,只有步驟1和2適用。
認爲該指數的一個好方法是,它的一切,還是真的,一個秒副本的第三複製和工作樹是第三。也就是說,在任何時候,你有:
HEAD
或有時@
。由於這是一次提交,因此根本無法更改。請注意,您可以在這裏從兩個方向複製文件:從HEAD
到索引,從索引到工作樹或從工作樹到索引。但由於承諾永遠不能更改您不能從索引複製到HEAD
。 (你所做的是做一個新的提交從索引複製到新提交。當然,這個新提交是永久性的。)
當您運行git rm
其從指數&工作目錄中刪除的文件。
參考 - git-rm
如果我通過使用'rm'而不是從工作目錄中刪除文件'git rm',只有工作目錄中的文件被刪除,但它仍然存在於索引中,對吧? –
對。 Git不會抱怨這個,並且這個文件將會在你下一次的提交中! – torek
我還應該提到,如果你的'rm file'(這樣它已經從工作樹中消失了,但仍然在'HEAD'和index中),那麼'git add file','git add'步驟會從索引中刪除文件(!)。在使用'git add --all'時,在這裏有一些細微的角落案例改變了Git 1.x和2.x之間的行爲。通常更明智的做法是不要讓索引和工作樹全部錯誤地匹配哪些文件在哪個文件中,因爲它變得非常混亂。 – torek