我做了一些非常愚蠢的事。
我使用git commit(文件编辑+新文件)(C)进行了提交。
然后我修改了最后一次提交。
然后我使用git rm -r
递归删除了所有文件(!)
然后我做了另一个git commit(C)。
A-B-C ↑ master
有没有办法取消删除文件但保留我在第一次提交时所做的更改? (C) 我宁愿不回到(B)。 我试过git reset --soft head ^,那么git status列出了我删除的文件,然后我做了git checkout,但仍然没有运气。我甚至不知道是否可能。
答案 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。