我在 Windows 上使用 Git Gui 和 Gitk。如何撤消过去两个小时内的硬重置?
(是否可以从这些应用程序中执行此操作,而不使用命令行?)
我看到了这个 SO post,它说在 git 的垃圾收集发生之前可以撤消。我可能已经退出并重新打开了其中一个或两个应用程序。
我在 Windows 上使用 Git Gui 和 Gitk。如何撤消过去两个小时内的硬重置?
(是否可以从这些应用程序中执行此操作,而不使用命令行?)
我看到了这个 SO post,它说在 git 的垃圾收集发生之前可以撤消。我可能已经退出并重新打开了其中一个或两个应用程序。
如果您在执行 git reset --hard 时未提交工作树中的更改,那么这些更改将永远消失。你必须使用你的记忆(在你的头脑中)来重新创建它们。
在您切换到的提交之后提交的更改不会丢失。它们可能没有指向它们的参考,这使得它们更难以定位。列出对 repo 的所有低级更改的工具是git reflog
. 在找到要恢复的提交后,观察第一行中的哈希值并使用git reset --hard #hashnumber
orgit checkout #hashnumber
来获取更改。我在http://quirkygba.blogspot.com/2008/11/recovering-history-with-git-reflog.html上找到了这条有用的线路:
gitk --all $(git reflog | cut -c1-7)
这将显示 gitk 中所有隐藏的更改,您可以在其中轻松查看、指向、单击和创建新分支。
正如您提到的,未引用的提交通常会在存储库中保存 30 天。
编辑:我必须在此处添加内容,以便我的编辑至少有 6 个字符。我知道,有时代码修复少于6 个字符,但毕竟在这篇文章中可能还有其他需要改进的地方。
请参阅问题链接中的 Brian Riehman 和 Pat Notz 的答案。
一种解决方案是使用命令行。
在 Windows 中,在包含您的.git
目录的目录中打开 DOS。
键入类似以下内容以查看您要进行的提交:
"c:\Program Files\Git\bin\git.exe" reflog
要转到某个提交,请键入以下内容,其中最后一个表达式是该提交的 SHA1 代码:
"c:\Program Files\Git\bin\git.exe" reset --hard 5eb4080
我认为您无法撤消硬重置以恢复未提交的更改-您可以撤消变基,因为 blob 仍然可用,但是如果您从未将最新更改提交给 Git ,那么它覆盖的任何内容很可能都是历史。我很想知道我错了!