【问题标题】:How do you undo a hard reset in Git Gui or Gitk on Windows?如何在 Windows 上撤消 Git Gui 或 Gitk 中的硬重置?
【发布时间】:2011-04-20 02:03:54
【问题描述】:

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

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

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

【问题讨论】:

  • 这实际上是一个通用的 git 问题,解决方案也很通用。由于此问题没有特定于 windows 的内容,我认为您应该删除 windows 标签。

标签: windows git gitk git-gui


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

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

【讨论】:

    【解决方案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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我对前一天的提交进行了硬重置。我可以取回那些后续提交吗?
      猜你喜欢
      • 2016-04-23
      • 2021-11-03
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2013-01-18
      相关资源
      最近更新 更多