当我使用“git reset --hard head”命令后,如何恢复我的提交记录?

5

我已经在一个项目上工作了几个月,并且有定期的提交。我使用Heroku来存储我的应用程序。我将代码推送到Heroku,然后使用Git GUI将文件回滚到12月7日,然后强制将其推送到Heroku。我想要恢复特定的文件夹,但没有意识到它会恢复整个目录。

然后我意识到我失去了12月7日及以后的所有提交记录。

我尝试了git lost-found命令,我的目录中有大约20个reflog。我正在寻找特定的提交记录,我有Heroku的哈希值为8d4f84a。但是当我执行git checkout 8d4f84a时,它给出错误信息“未知的修订版本或者工作树中找不到路径”。

我进行了Heroku回滚,这将我的文件恢复到之前的推送状态,但我无法克隆这些文件。

我失去了所有之前的工作吗?

编辑:附上reflog,包含从12月7日及之前的旧提交记录

eb64161 HEAD@{0}: checkout: moving from 4d6a18311433a9bee737eda9bf6114f8bc35fa2c
4d6a183 HEAD@{1}: checkout: moving from master to HEAD@{3}
eb64161 HEAD@{2}: checkout: moving from eb64161f29fff57ab861880c4cd1cdf7641c39bf
eb64161 HEAD@{3}: checkout: moving from master to master@{2013-01-19}
eb64161 HEAD@{4}: pull: Fast-forward
4d6a183 HEAD@{5}: checkout: moving from 7e1ae4e7907f446d7d238741933509d4d64e0715
7e1ae4e HEAD@{6}: checkout: moving from 60299f452350c05d22e6bd703f1a7658112c171f
60299f4 HEAD@{7}: checkout: moving from 8e58a900f13132e0dcaa39ae980f7868184cbf65
8e58a90 HEAD@{8}: checkout: moving from 49f004a3d08ee52ee24334c07fc9d35c40480dbb
49f004a HEAD@{9}: checkout: moving from 4374fecebf215eb868beb881af8909922d45e764
4374fec HEAD@{10}: checkout: moving from 13a4a7e00c15986e07c48969f026afb2fe02f60
13a4a7e HEAD@{11}: checkout: moving from master to 13a4a7e00c15986e07c48969f026a
4d6a183 HEAD@{12}: reset: moving to HEAD@{20}
6eb9a8e HEAD@{13}: reset: moving to HEAD@{1}
0964917 HEAD@{14}: reset: moving to HEAD~1
6eb9a8e HEAD@{15}: reset: moving to HEAD~1
e6474e3 HEAD@{16}: reset: moving to HEAD~1
821fe87 HEAD@{17}: reset: moving to HEAD~1
04bd607 HEAD@{18}: reset: moving to HEAD~1
4173f0d HEAD@{19}: reset: moving to HEAD~1
6f15ad8 HEAD@{20}: reset: moving to HEAD~1
a847ccd HEAD@{21}: reset: moving to HEAD~1
498d2e7 HEAD@{22}: reset: moving to HEAD~1
fe2772d HEAD@{23}: reset: moving to HEAD~1

请查看reflog - Ricardo Souza
请查看以下两个答案: - friism
只需从reflog中选择您想要的提交并进行checkout,您就可以找回所有的工作。除非您已经清理了您的repo。 - Ricardo Souza
所有这些 reflog 都是针对 12 月 7 日及之前的。 - user1426594
为什么不能从Heroku克隆?在这里, git clone git@heroku.com:projectname.git 似乎可以正常工作。您的项目执行此操作时得到什么输出? - cjc343
显示剩余4条评论
3个回答

6
是的,你可以做到这一点,打开Git控制台并输入:
git reflog 

之后您将会获得您的提交列表

git reset --hard "hash of commit which you need"

3
如果您希望将新的 HEAD 设置为 8d4f84a,请执行以下操作:
git reset --hard 8d4f84a

重置也适用于该方向。

致命错误:模棱两可的参数 '8d4f84a':未知的修订版或路径不在工作树中。 - user1426594
我强制推送了一个错误的仓库副本,导致我找不到那个提交记录。我通过 Twitter 联系了 Heroku 支持团队,并解决了这个问题。 - user1426594

3

git reflog 显示了所有创建过的提交对象的历史记录。我猜删除的提交对象的生命周期为60天。所以如果提交不是太旧,你可以尝试使用 git cherry-pick your-commit-hash 命令。使用git show命令可以查看在挑选之前的代码。希望这能帮到你。


错误的版本号'8d4f84a'。我猜那个提交记录可能不存在,或者我出了什么大问题。 - user1426594

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接