Undo delete in GIT
我做了件很蠢的事。我使用git commit(文件编辑+新文件)进行了提交(c)。然后我做了最后的修改承诺。然后我递归地删除了所有文件!!)使用git rm -r。然后我又提交了一个git commit(c)。
是否有任何方法可以恢复文件,但保留我在第一次提交时所做的更改?(c)我宁愿不回到(b)。我尝试了Git重置——软头^,所以Git状态列出了我删除的文件,然后我执行了Git签出,但仍然没有运气。我甚至不知道是否有可能。
- 所以你想要你的提交文件吗?
- 不,我想继续在C上,但没有删除文件,只有我的文件编辑和文件添加。我的工作树中现在没有这些文件,它们被删除。
帮你自己一个忙,不要像另一个答案所建议的那样去做,去解决更多的问题。
如果已从工作目录中删除文件,但尚未提交更改,请执行以下操作:
警告:在执行此命令之前提交未提交的文件,否则将丢失所有文件。
删除的文件应再次返回。
如果没有,如果你能从git reflog中找到你想要的承诺(c,等等,你的问题还不清楚),那么就做git reset --hard ,你应该已经准备好了。
- +1您可以添加一个指向分离头问题的链接(如stackoverflow.com/questions/3965676/为什么git分离了我的he‌&8203;ad/…),以说明git签出sha1答案的问题。Orig ou Head在这件事上会有帮助吗?(stackoverflow.com/questions/964876/head和orig head in gi‌&8203;t/…)
- 好的,所以这个答案实际上更好。重置——很难将我留在主分支上,而我不会处于"分离头"状态。萨沙的回答也很好,以防找回我丢失的数据。
- 谢谢你刚才救了我。
- 除了恢复已删除的文件之外,git checkout -f还放弃了所有其他未进行的更改,因此请小心。
- 最后的评论需要突出显示。而且要注意,它不会像您想象的那样将自己限制在当前目录中,它会破坏您的整个存储库。真的。
- 对于特定文件的选择性恢复:git checkout--
- 如果文件尚未提交,但已被暂存,则需要先将其取消暂存(git reset head)。
- 我无意中删除了一些未跟踪的文件。有什么解决办法吗?
如果我正确理解你,你重写了commit c,那么最初的commit,我们称之为c1,从commit图中是不可访问的,但它仍然存在(git将所有commit保留一段时间)。使用git reflog获取commit散列,使用git checkout 或其他适当的命令获取旧状态c1。
- 我的上帝!非常感谢!承诺就在那里。您为我节省了三周的工作(自上次提交以来)。谢谢您!
- 还有一个问题。现在它说我处于"超然状态"。我怎样才能回到我的"主人"部门?
- 不客气。但是,我不明白投反对票。Git重置——hard可能更危险。还不清楚海报是否修改了原版的commit c以及他想要保留的更改。