[英]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.