3

我在 Windows 上使用 Git Gui 和 Gitk。如何撤消过去两个小时内的硬重置?

(是否可以从这些应用程序中执行此操作,而不使用命令行?)

我看到了这个 SO post,它说在 git 的垃圾收集发生之前可以撤消。我可能已经退出并重新打开了其中一个或两个应用程序。

4

3 回答 3

4
  1. 如果您在执行 git reset --hard 时未提交工作树中的更改,那么这些更改将永远消失。你必须使用你的记忆(在你的头脑中)来重新创建它们。

  2. 在您切换到的提交之后提交的更改不会丢失。它们可能没有指向它们的参考,这使得它们更难以定位。列出对 repo 的所有低级更改的工具是git reflog. 在找到要恢复的提交后,观察第一行中的哈希值并使用git reset --hard #hashnumberorgit 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 个字符,但毕竟在这篇文章中可能还有其他需要改进的地方。

于 2011-01-17T15:19:20.300 回答
2

请参阅问题链接中的 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
于 2010-10-02T02:34:12.533 回答
0

我认为您无法撤消硬重置以恢复未提交的更改-您可以撤消变基,因为 blob 仍然可用,但是如果您从未将最新更改提交给 Git ,那么它覆盖的任何内容很可能都是历史。我很想知道我错了!

于 2010-10-01T22:34:10.050 回答