我做了一个git reset之后如何恢复我的提交 - 硬头?

时间:2013-02-01 23:25:51

标签: git heroku

我几个月来一直在做一个项目,经常提交。我使用Heroku存储我的应用程序。我推送到Heroku,然后我使用Git GUI将我的文件回滚到12月7日,然后我强制推送到Heroku。我试图恢复一个特定的文件夹,但没有意识到它将恢复整个目录。

然后我意识到我在12月7日之后失去了所有的提交并且向前。

我已经尝试过git lost-found,我的目录在reflog中有大约20个头。我正在寻找一个特定的提交,我有来自Heroku的哈希。它是8d4f84a,但是当我执行git checkout 8d4f84a时,它给出了错误“未知修订或在工作树中找不到路径。”

我做了一次heroku回滚,并将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

3 个答案:

答案 0 :(得分:4)

是的,你可以这样做,打开git console并输入

git reflog 

您将获得之后的提交列表

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

答案 1 :(得分:3)

如果您希望新的HEAD为8d4f84a,请执行

git reset --hard 8d4f84a

重置也符合这个方向。

答案 2 :(得分:3)

git reflog显示有史以来创建的所有提交对象的历史记录。我想删除的提交对象的生命周期是60天。因此,如果提交时间不长,那么您可以执行git cherry-pick your-commit-hash之类的操作。可以使用git show在挑选代码之前检查代码。希望这会有所帮助。