在GIT中撤消删除

Nat*_*ely 55 git commit undo delete-file undelete

我做了一件非常愚蠢的事.我使用git commit(文件编辑+新文件)(C)进行了提交.然后我修改了最后一次提交.然后我使用递归删除所有文件(!)git rm -r 然后我做了另一个git commit(C).

A-B-C
    ?
  master

有没有办法取消删除文件,但保留我在第一次提交时所做的更改?(C)我宁愿不回到(B).我试过git reset --soft head ^,那么git status列出了我删除的文件,然后我做了git checkout,但仍然没有运气.我甚至不知道是否可能.

man*_*lds 168

帮自己一个忙,不要git checkout <hash>像其他答案那样做,并进入更多问题.

如果您已从工作目录中删除了文件但尚未提交更改,请执行以下操作:

git checkout -f
Run Code Online (Sandbox Code Playgroud)

注意:在执行此命令之前提交未提交的文件,否则您将丢失所有文件

删除的文件应该再次返回.

如果没有,如果你能找到你想要的提交(C等等 - 你的问题不清楚)git reflog,git reset --hard <hash from reflog>那就做,你应该全部设定.

  • 除了恢复已删除的文件外,`git checkout -f`还会丢弃您没有上传的所有其他更改,因此要小心. (21认同)
  • +1您可以添加指向分离头问题的链接(如http://stackoverflow.com/questions/3965676/why-did-git-detach-my-head/3965714#3965714),以说明git的问题结账SHA1回答.在这种情况下,ORIG_HEAd会帮助吗?(http://stackoverflow.com/questions/964876/head-and-orig-head-in-git/964927#964927) (3认同)
  • 最后的评论需要突出显示.并且要注意它并不像你想象的那样将自己限制在你当前的目录中,它会破坏你的整个存储库.哇. (3认同)
  • 选择性取消删除特定文件:git checkout - <FILENAME> (3认同)
  • 谢谢你刚刚保存我的屁股. (2认同)

Sas*_*cha 6

如果我理解正确你重写了提交C.那么原始提交,让我们称之为C1无法从你的提交图中访问,但它仍然存在(git保持所有提交一段时间).使用git reflog得到提交哈希和git checkout <hash>或其他适当的命令去老态C1.