我認命說git rm -r .
。我該如何恢復?如何恢復「git rm -r。」?
我沒有提交。
我認爲所有的文件都被標記爲刪除,並且也從我的本地結帳中物理刪除。
編輯:我可以(如果我知道命令)恢復到上次提交。但如果我可以撤消git rm -r .
,那將會好很多。因爲我不確定我在最後一次提交之後以及在git rm -r .
之前做了什麼。
我認命說git rm -r .
。我該如何恢復?如何恢復「git rm -r。」?
我沒有提交。
我認爲所有的文件都被標記爲刪除,並且也從我的本地結帳中物理刪除。
編輯:我可以(如果我知道命令)恢復到上次提交。但如果我可以撤消git rm -r .
,那將會好很多。因爲我不確定我在最後一次提交之後以及在git rm -r .
之前做了什麼。
git reset HEAD
應該這樣做。如果您沒有任何關注的未提交更改,那麼
git reset --hard HEAD
應強制重置所有內容到您上次提交。如果您有未提交的更改,但第一個命令不起作用,然後用git stash
保存您提交的修改:
git stash
git reset --hard HEAD
git stash pop
請注意,'git reset --hard HEAD'會破壞您在當前工作目錄的父目錄中所做的任何有用更改。 – 2010-02-05 14:41:50
此主題只是防止即將發生的心臟病發作。 – 2011-04-07 11:47:32
@Mild:我還是穿着冷汗! – hoipolloi 2011-08-04 21:00:23
更新:
由於git rm .
刪除工作結賬以及在該指數在這所有文件和子目錄,你需要撤消這些變化:
git reset HEAD . # This undoes the index changes
git checkout . # This checks out files in this and child directories from the HEAD
這應該做你想要什麼。它不會影響簽出代碼或索引的父文件夾。
老的回答,這不是:
reset HEAD
會做的伎倆,並不會清除你已經將你的文件所做的任何未提交的更改。
之後,您需要重複您排隊的任何git add
命令。
'co'就是'checkout' – DanSkeel 2012-05-10 23:52:22
對不起,我總是設置'git alias .co =「checkout」'這樣'git co'確實簽出。 – 2012-06-14 22:53:50
我混帳rm'd幾個文件,去之前我下進行更改時提交我意識到我需要回來一些這些文件。而不是藏匿和復位,你可以,如果你想簡單地籤刪除你錯過了單獨的文件/:
git checkout HEAD path/to/file path/to/another_file
這將使你的其他未提交的修改完整,沒有解決方法。
如果你最終沒有上述工作的,你也許可以從這裏獲取使用建議數據:http://www.spinics.net/lists/git/msg62499.html
git prune -n
git cat-file -p <blob #>
你已經救了我 – Bear 2014-12-22 11:04:48
4年後,依然是救命恩人! – ThievingSix 2016-09-18 06:23:19
訣竅! – 2017-02-22 13:54:02
要恢復一些單個文件或文件夾,一個可以使用以下
git reset -- path/to/file
git checkout -- path/to/file
這將首先重新創建path/to/file
的索引條目,並重新創建上次提交時的文件,即HEAD
。
提示:可以將一個提交散列傳遞給兩個命令以從較舊的提交重新創建文件。有關詳細信息,請參閱git reset --help
和git checkout --help
。
有一些很好的答案了,但我可能會建議一個很少使用的語法,不僅偉大工程,但非常明確的想要什麼(爲此不可怕或神祕)
git checkout <branch>@{"20 minutes ago"} <filename>
我一個相同的情況。在我的情況的解決方案是:
git checkout -- .
如果你致力於推的變化,你可以做到這一點得到迴文件
// Replace 2 with the # of commits back before the file was deleted.
git checkout HEAD~2 path/to/file
我一模一樣的問題:被清理我的文件夾,重新安排和移動文件。我輸入了:git rm 。並按回車鍵;然後感覺到我的腸子鬆了一下。幸運的是,我沒有直接輸入git commit -m「」。
但是,下面的命令
git checkout .
恢復一切,救了我的命。
獲取列表提交
git log --oneline
例如穩定的承諾具有散:45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git reset --hard 45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git push -ff origin master
這對我有效,謝謝 – 2017-04-18 17:45:53
撤消git的RM
git rm file # delete file & update index
git checkout HEAD file # restore file & index from HEAD
撤消git的RM -r
git rm -r dir # delete tracked files in dir & update index
git checkout HEAD dir # restore file & index from HEAD
撤消的git室射頻
git rm -r dir # delete tracked files & delete uncommitted changes
not possible # `uncommitted changes` can not be restored.
Uncommitted changes
包括not staged changes
,staged changes but not committed
。
當然,沒有任何東西可以撤銷'git rm -rf',因爲這可能會刪除未跟蹤或已暫存(僅)的文件。 – jpaugh 2018-02-05 18:28:01
'git rm -rf file'和'git rm -rf dir'不會刪除任何未跟蹤的文件。 – 2018-02-06 02:24:30
對於這個特定的問題,重置--hard是一個很好的解決方案...它已經列出,所以我只是在這個評論中提到你可能想要檢查git-reflog的文檔。 – 2010-01-24 05:42:51
請注意,因爲您沒有爲'git rm'提供'-f',所以git不會刪除任何已經執行或未執行更改的文件,所以'git reset; git checkout .'應該可以恢復所有的東西。 – 2010-01-24 08:47:16
只要小心 - git結帳。將消滅所有未分離的變化。 – PeterB 2011-10-11 15:30:27