重置后,恢复已提交但未推送的分支

After reset, recover branch that was committed but not pushed

我从已推送的提交(称为提交 A)开始了一个新分支,然后继续进行更改并在没有推送的情况下向这个新分支(称为 B、C 和 D)提交了大约三次。然后我发现了一个我无法立即看到其来源的错误,我决定我想返回提交 A 以查看该错误当时是否存在。

我正在使用 TortoiseGit,所以我找到了提交 A 并右键单击它。我现在知道暂时使用项目的正确命令应该是 "Switch/Checkout",但我错误地选择了 "Reset [branch name] to this"。

谢天谢地,我做了混合重置而不是硬重置,这意味着我仍然在我的工作目录中的提交 B、C 和 D 中实现了更改。意识到自己的错误后,为了安全起见,我承诺并推动了这些。

在 TortoiseGit 日志中,提交 A、B 和 C 不再可见。这不是世界末日,因为我取得的进步已经浓缩到我在重置后所做的一次提交中。但是,我仍然想恢复这些提交,因为它们比大提交更具增量性并且具有描述性消息。可能吗?

我是 git 的新手,到目前为止只使用过 TortoiseGit 界面。我更喜欢使用它的解决方案,但如有必要将使用命令行。非常感谢。

说到命令,git reflog 将允许您找到丢失的提交的 SHA,然后您可以执行类似 git branch <name of the ressurected branch> <SHA of the last commit lost>

的操作

是否使用 'Reflog'。要在 TortoiseGit 中执行此操作,请在目录中按住 shift 键并单击鼠标右键(您必须按住 shift 键才能获得扩展菜单)。转到 TortoiseGit -> Show Reflog 将显示所有以前的提交。从那里我可以切换到我丢失的分支。

感谢那些告诉我有关 reflog 的人。

您的情况:

显示 RefLog

通过

使 D 可见
  1. 显示日志+创建分支
  2. 直接创建分支
  3. Switch/Checkout
  4. (创建标签...)

日志