我不小心说了git rm -r .
。我该如何恢复?
我没有犯。
我认为所有文件都标记为删除,并且也从我的本地结帐中实际删除。
编辑:我可以(如果我知道命令)恢复到最后一次提交。但是如果我能撤消它会好得多git rm -r .
。因为我不太确定在上次提交之后和提交之前我做了什么git rm -r .
。
-f
给git rm
git,因此不会删除已暂存或未暂存更改的任何文件,因此a git reset; git checkout .
应该可以恢复所有内容。
我不小心说了git rm -r .
。我该如何恢复?
我没有犯。
我认为所有文件都标记为删除,并且也从我的本地结帐中实际删除。
编辑:我可以(如果我知道命令)恢复到最后一次提交。但是如果我能撤消它会好得多git rm -r .
。因为我不太确定在上次提交之后和提交之前我做了什么git rm -r .
。
-f
给git rm
git,因此不会删除已暂存或未暂存更改的任何文件,因此a git reset; git checkout .
应该可以恢复所有内容。
Answers:
git reset HEAD
应该做。如果您不需要任何未提交的更改,那么
git reset --hard HEAD
应该强制将所有内容重置为您的最后一次提交。如果您确实有未提交的更改,但是第一个命令不起作用,请使用git stash
以下命令保存未提交的更改:
git stash
git reset --hard HEAD
git stash pop
git reset --hard HEAD
会破坏您在当前工作目录的父目录中所做的任何有用的更改。
当我意识到我需要一些文件时,我git-rm了一些文件,并在下一次提交之前继续进行更改。除了存储和重置外,如果需要,您可以简单地检出丢失/删除的单个文件:
git checkout HEAD path/to/file path/to/another_file
这将使您其他未提交的更改保持完整,没有任何解决方法。
git rm
而不是整个递归的人,此答案有所帮助git rm -r
。对于完全递归删除,其他解决方案可能会更好,具体取决于删除的文件数量。
更新:
由于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
排队的所有命令。
git alias.co="checkout"
,这样git co
做结帐。
如果以上操作均无效,则可以使用建议从以下位置检索数据:http : //www.spinics.net/lists/git/msg62499.html
git prune -n
git cat-file -p <blob #>
撤消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 rm -rf
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
,因为这也可能删除未跟踪或暂存的(仅)文件。
git rm -rf file
并且git rm -rf dir
不会删除任何未跟踪的文件。
获取列表提交
git log --oneline
例如,稳定提交具有哈希: 45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git reset --hard 45ff319c360cd7bd5442c0fbbe14202d20ccdf81
git push -ff origin master
在Git 2.23+(2019年8月)中,将使用正确的命令来还原文件(和索引)... git restore
(不是reset --hard
或令人困惑的git checkout
命令)
那是:
git restore -s=HEAD --staged --worktree -- .
或其缩写形式:
git restore -s@ -SW -- .