67

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

美国广播公司
    ↑
  掌握

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

4

2 回答 2

186

帮自己一个忙,不要git checkout <hash>像其他答案所暗示的那样去做,而是要解决更多问题。

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

git checkout -f

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

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

如果没有,并且您可以从中找到您想要的提交(C 等 - 您的问题不清楚)git reflog,那么git reset --hard <hash from reflog>您就应该做好准备。

于 2012-02-28T07:36:09.660 回答
6

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

于 2012-02-28T07:07:20.290 回答