扯淡!大约一个星期前,我在尝试清理我的存储库时,正在重新设置一些提交,显然我实际上没有完成它。今天,一个星期和几个提交之后,我从今天开始重新订购一些提交,它告诉我,我已经处于变革的中间。
这应该是复制我的回购以防万一的提示。但我没有...而是我跑了git rebase --abort
当时听起来正确。嗯,那不对。它从一周前中止了反转,并将主人的HEAD重置为旧的。虚设!
我还有其他几个相当近的分支,我已经多次推到远程,但最近的变化似乎永远消失了。我没有足够的git-fu来知道是否有办法恢复我的变化。
我搞砸了吗?
编辑 - 哇!多谢你们! git reflog
太棒了!我已经完全恢复了......经验教训。标记Tchalvak的答案被接受为第一个发布。
答案 0 :(得分:99)
检查git reflog
。在几乎所有情况下,您都可以使用这些提交哈希作为参考回溯。
我还会将git repo目录实际复制到其他地方,作为进行初步测试的地方,看看哪些方法有效,这样你可以随意乱搞任何你想要的东西而不会丢失未跟踪文件或让事情进入你强大的状态>不能回来。
答案 1 :(得分:64)
您应该能够使用git reflog
获取最新提交的SHA1(在rebase -abort之后消失)。
然后,您可以将当前分支重置为SHA1
# Suppose the old commit was HEAD@{2} in the ref log
git reset --hard HEAD@{2}
有点像“Undoing a git reset --hard HEAD~1
”。
有关其他恢复示例,另请参阅“illustrated guide to recovering lost commits with Git”。