2017-06-16 48 views
0

當您通過運行git rm命令從項目中刪除文件時,文件實際上何時從索引中刪除?當您提交刪除時將其刪除,或在git rm運行時刪除?當您運行git rm時,該文件何時從索引中刪除?

從我的理解,一個git RM包括以下步驟:從工作目錄

  • 刪除文件從指數

    1. 刪除文件提交的文件刪除

    我只是不確定該文件是從索引開始刪除還是刪除提交。這些步驟是否正確?

  • 回答

    4

    它立即發生,但在這一點上沒有任何承諾。也就是說,只有步驟1和2適用。

    認爲該指數的一個好方法是,它的一切,還是真的,一個副本的第三複製和工作樹是第三。也就是說,在任何時候,你有:

    • 電流承諾,又名(又稱)HEAD或有時@。由於這是一次提交,因此根本無法更改。
    • 擬議的下一個承諾,又名指數,又名臨時區域,又名緩存。 (爲什麼三個名字?嗯,這是Git。:-))這不是還有 -a提交,所以你可以改變它。但它是一種特殊的Git形式,很難查看或處理存儲在其中的任何文件。
    • 工作樹,其中有一個形式,你(和你的電腦的其餘部分)可以與他們合作的文件。工作樹也可以未跟蹤文件它(和一些人的可以忽略不計,以及未跟蹤):表示該指標不能包含未跟蹤文件,因爲根據定義,無論是在索引中,被跟蹤。

    請注意,您可以在這裏從兩個方向複製文件:從HEAD到索引,從索引到工作樹或從工作樹到索引。但由於承諾永遠不能更改您不能從索引複製到HEAD。 (你所做的是做一個新的提交從索引複製到新提交。當然,這個新提交是永久性的。)

    +0

    如果我通過使用'rm'而不是從工作目錄中刪除文件'git rm',只有工作目錄中的文件被刪除,但它仍然存在於索引中,對吧? –

    +0

    對。 Git不會抱怨這個,並且這個文件將會在你下一次的提交中! – torek

    +0

    我還應該提到,如果你的'rm file'(這樣它已經從工作樹中消失了,但仍然在'HEAD'和index中),那麼'git add file','git add'步驟會從索引中刪除文件(!)。在使用'git add --all'時,在這裏有一些細微的角落案例改變了Git 1.x和2.x之間的行爲。通常更明智的做法是不要讓索引和工作樹全部錯誤地匹配哪些文件在哪個文件中,因爲它變得非常混亂。 – torek

    0

    當您運行git rm其從指數&工作目錄中刪除的文件。

    參考 - git-rm

    相關問題