在GIT中撤消删除

时间:2012-02-28 06:59:00

标签: git commit delete-file undo undelete

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

A-B-C
    ↑
  master

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

2 个答案:

答案 0 :(得分:166)

帮自己一个忙,不要像其他答案那样做git checkout <hash>,并且会遇到更多问题。

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

git checkout -f

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

删除的文件应该又回来了。

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

答案 1 :(得分:6)

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