77

废话!大约一周前,我在尝试清理我的存储库时重新调整了一些提交,显然我并没有真正完成它。今天,一周后的几次提交,我去 rebase 重新排序了从今天开始的一些提交,它告诉我我已经在 rebase 中了。

这应该是一个提示复制我的回购以防万一。但我没有……相反,我跑了git rebase --abort,这在当时听起来是对的。嗯,那是不对的。它从一周前中止了 rebase 并将 master 的 HEAD 重置为旧的。假的!

我还有其他几个相当新的分支,并且我已经多次推送到远程,但最近的更改似乎永远消失了。我没有适当级别的 git-fu 知道是否有任何方法可以恢复我的更改。

我搞砸了吗?

编辑- 哇!多谢你们!git reflog太棒了!我完全康复了……吸取了教训。将 Tchalvak 的答案标记为第一个发布者已被接受。

4

2 回答 2

127

检查git reflog。在几乎所有情况下,您都可以使用这些提交哈希作为参考及时回溯。

我还会将 git repo 目录物理复制到其他地方,作为进行初步测试的地方,看看什么会起作用,这样你就可以随意处理你想要的任何东西,而不会丢失未跟踪的文件或让事情进入你无法回来的状态从。

于 2010-04-22T19:06:00.410 回答
77

您应该能够使用git reflog.

然后,您将能够将当前分支重置为那些 SHA1

# Suppose the old commit was HEAD@{2} in the ref log
git reset --hard HEAD@{2}

这有点像“ Undoing agit reset --hard HEAD~1 ”。

另请参阅“使用 Git 恢复丢失提交的图解指南”,了解其他恢复示例。

于 2010-04-22T19:07:18.087 回答