2013-03-16 110 views
6

我很奇怪,爲什麼當我這樣做:git的RM --cached和 '已刪除' 狀態

git add <file> 

,並在那之後,我做的:

git rm --cached <file> 

文件保留在刪除狀態在階段

這裏的例子: enter image description here

尋找有關文件上的「刪除」狀態的解釋。

感謝

+0

你必須'混帳commit'的變化對他們採取在資源庫中的效果。這樣,你可以暫停操作(如果你改變了主意等),它基本上列出了你在工作拷貝(在這種情況下,'rm'命令)對你做的修改之前所做的修改。 – Chris 2013-03-16 22:57:00

+0

通常'綠色「意味着對索引/階段所做的更改,所以,根據你的解釋,我必須明白'已刪除'狀態反映了_delete_是在索引/舞臺上完成的,它有點奇怪,但有意義。 – ferpega 2013-03-16 23:32:52

回答

6

嘗試git reset HEAD yourFile,而不是git rm --cached

混合重置會將您的文件從索引中刪除,而不會將其從工作樹中刪除。
請參閱「Undo 'git add' before commit」。

在你的情況下,git stash需要上一頁git reset,然後git stash pop將恢復您的變動情況,復位後。


關於git rm --cached後「deleted」狀態,該命令在索引寄存器文件,這就是爲什麼你看到它記錄下一個承諾爲「已刪除」的缺失。

OP Ferpegainsists

我問爲什麼刪除的狀態是那裏產生的git rm --cached因爲這個命令應該具有比git reset HEAD <file>相同的行爲,你可以在git rm看到。

恩,不,git rm有不一樣的行爲[git reset][8]
雙方將影響指數,但:

  • 之一(git rm)將記錄文件刪除在下次提交,因此「deleted」狀態,
  • 其他(git reset)將將HEAD複製到索引,將所述索引重新設置迴文件在HEAD中的內容。
+0

Git reset刪除我在文件的工作目錄上的更改。我不想放棄我的文件修改。我只想暫時停止文件。所以我必須做的是我正在做的事情。我只需要解釋'deleted'狀態。 – ferpega 2013-03-16 23:25:47

+0

@Ferpega ok,回答編輯 – VonC 2013-03-16 23:33:08

+0

我在'git reset'和'git stash pop'之前測試過'git stash',並且它不會從舞臺上移除文件。在三個命令結束時,所有的東西都保留在'git add'命令之後。 – ferpega 2013-03-16 23:41:35

0

您已將該文件添加到索引/緩存(在屏幕截圖中爲綠色),並告知您想要刪除該文件。索引/緩存更改僅在提交完成時執行。

我在想你可能把一個文件放在索引/緩存中,然後想刪除它(所以它不會被提交)。

命令要做到這一點是消息git status給你(右盤旋deleted以上。

git reset HEAD <filename> 
+0

嗨@David_Culp是的,'git reset HEAD '你說什麼和我可以使用該命令獲得相同的結果。但我並沒有要求做點什麼。我在問爲什麼'deleted'狀態是由於'git rm --cached'導致的,因爲這個命令應該和'git reset HEAD '有相同的行爲,你可以在http:// git-scm中看到。 com/docs/git-rm但它增加了另一箇中間結果,你必須'commit'才能得到最終結果。 – ferpega 2013-03-16 23:57:26

+1

@Ferpega'git rm --cached'與git reset沒有相同的行爲,請參閱我編輯的答案。 – VonC 2013-03-17 00:12:35

+0

現在很清楚。謝謝。 – ferpega 2013-03-17 00:15:40

相關問題