簡體   English   中英

如何恢復使用`git rm .`意外刪除的文件?

[英]How do I restore files that were deleted accidentally with `git rm .`?

我剛剛做了一個舞台:

git add .

當我想重置時,我使用了:

git rm .

突然所有文件都被刪除了!! 我認為它應該只是刪除樹工作,它的行為就像我一樣:

rm -rf ./*

為什么它刪除了所有文件? 我應該使用什么命令來代替?

修復刪除

當您從索引和工作樹中刪除文件時,git 會注意到您在當前提交中擁有的文件現在已經消失了,因此git status將顯示這些文件已被刪除。

然而,沒有必要恐慌。 這只是 Git 告訴您與先前提交相比,它看到這些文件消失的方式。 這些文件仍然存在於 repo 中。 事實上,如果您現在暫存所有刪除並提交,您將只有一個沒有文件的新提交,但您當前的提交仍將與存儲庫中的所有文件一起存在。 您可以隨時查看它,它會將這些文件恢復到工作目錄中。

此答案中提供了有關如何從git rm恢復文件的信息。

注意:小心:

 git reset --hard

這將在這種情況下起作用(根據其他答案),但要小心一點 - 了解雖然它將所有文件恢復到最后一次(當前)提交,這意味着您將丟失索引和工作目錄。 在這種情況下,您確實想要恢復所有文件(因為git rm .刪除了所有文件),所以這不是問題。

您可以使用以下命令將單個文件恢復到上次提交狀態

git reset --hard [filename]

將來如何僅從索引中刪除文件

關於如何從暫存區刪除文件 - 我更喜歡使用 Git Extensions,這是一種流行的開源 Git GUI 工具。 當您點擊“提交”按鈕時,它會打開一個提交窗口,其中顯示所有已暫存和未暫存的文件以及任何更改,讓您單擊其中任何一個並查看更改的差異,並且有按鈕可以在它們之間移動它們工作目錄和索引。

但是如果你想要命令行選項,你可以使用這個命令:

 git reset

將從索引中刪除所有文件/更改(注意:沒有句號!!)。 此外,您可以使用:

 git reset [filename]

取消暫存 [filename](或文件名模式,如 *.txt)。

這與使用git reset --mixed相同,並導致 git 將所有文件(或僅 [filename])設置回當前提交時的狀態。 --mixed選項僅重置索引,而不是工作目錄,因此它不會刪除文件中的任何更改,只會使文件/更改取消暫存。

如果你使用git reset --soft它不會做任何事情 - --soft不會重置索引或工作目錄,並且由於你沒有指定不同的分支或提交,它會將所有文件重置為使用現有索引和工作目錄的當前提交 - 這就是您已經擁有的!

如果您使用git reset --hard那么它將清除索引和工作目錄並將文件恢復到當前提交的原始狀態 - 它們將被取消暫存而不做任何更改 - 這是修復您的一種解決方案刪除問題。

如果你想重置你的添加,你可以做

git reset --hard

這將使您回到執行git add .之前的狀態git add . ,並且應該恢復所有消失的文件。

嘗試重置到最后一次提交,使用:

git reset HEAD --hard

所有這些重置對我都不起作用,我是多么害怕! 我的情況:我有一個空的存儲庫,我已經提交了 4 次。 我需要做的是在 git rm 生效之前轉到特定的提交。 所以就我而言,如果上述方法不起作用,請嘗試:

git log
git checkout <your-before-git-rm-commit>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM