在 GIT 中撤消删除
Posted
技术标签:
【中文标题】在 GIT 中撤消删除【英文标题】:Undo delete in GIT 【发布时间】:2012-03-17 16:11:28 【问题描述】:我做了一些非常愚蠢的事情。
我使用 git commit(文件编辑 + 新文件)(C)进行了提交。
然后我修改了最后一次提交。
然后我使用git rm -r
递归删除所有文件(!)
然后我又做了一个 git commit (C)。
有什么方法可以取消删除文件但保留我在第一次提交中所做的更改? (C) 我宁愿不要回到(B)。 我尝试了 git reset --soft head^,然后 git status 列出了我删除的文件,然后我做了 git checkout,但仍然没有运气。我什至不知道这是否可能。
【问题讨论】:
所以你想要你的提交 A 文件? 不,我想仍然在 C 上,但没有删除文件,只有我的文件编辑和文件添加。我的工作树中现在没有这些文件,它们已被删除。 【参考方案1】:帮自己一个忙,不要像其他答案建议的那样做git checkout <hash>
并解决更多问题。
如果您已从工作目录中删除文件但尚未提交更改,请执行以下操作:
git checkout -f
注意:在执行此命令之前提交未提交的文件,否则您将丢失所有文件
删除的文件应该又回来了。
如果没有,并且如果您可以从 git reflog
找到您想要的提交(C 等 - 您的问题不清楚),只需执行 git reset --hard <hash from reflog>
即可。
【讨论】:
+1 您可以添加一个指向分离的头部问题的链接(如***.com/questions/3965676/why-did-git-detach-my-head/…),以说明 git checkout SHA1 答案的问题。 ORIG_HEAd 在这种情况下会有所帮助吗? (***.com/questions/964876/head-and-orig-head-in-git/…) 好的,所以这个答案实际上更好。 reset --hard togit checkout -f
还会丢弃您尚未暂存的所有其他更改,因此请注意。
最后一条评论需要突出显示。请注意,它不会像您想象的那样将自己限制在您的当前目录中,它会破坏您的整个存储库。哇。
用于选择性取消删除特定文件: git checkout -- 如果我理解正确,你重写了提交 C。所以原始提交,我们称之为 C1 不能从你的提交图中访问,但它仍然存在(git 将所有提交保留一段时间)。使用git reflog
获取提交哈希并使用git checkout <hash>
或其他适当的命令来获取旧状态C1。
【讨论】:
还有一个问题。现在它说我处于“分离的 HEAD”状态。我如何才能回到我的“主”分支? 不客气。但是,我不理解否决票。一个 git reset --hard以上是关于在 GIT 中撤消删除的主要内容,如果未能解决你的问题,请参考以下文章