Git失去了提交
我试图解决一个问题在GIT中,并意外地使用Git重置 – 一些以前的承诺。 所以,现在我不能回到老头。
然而,在我做这件事之前,我已经克隆了存储库,所以我把丢失的提交回原来的。 这似乎昨天工作,但今天我看到,原来仍然坚持一个旧的承诺,新的似乎并不存在。 试图从克隆再推新的提交不起作用,因为git告诉我一切都是最新的。
我该如何解决?
为了让你的HEAD回到正确的位置:
-
git reflog
来获取HEAD最近的列表。 -
git show sha1
find你想要的HEAD的位置。 - 一旦你find你想要的提交,
git merge
让你的主人回到正确的位置。
一些解释:在一个git
commit中,没有任何一个提交给发生在它之后的提交。 当您重置HEAD时,您将其指向较旧的提交。 你以前的脑袋现在没有任何东西指向它。
我们使用reflog
来查看HEAD最近在哪里。 一旦它回到你想要的位置,你指向主人或其他一些分支回到那个地方,一切都很好!
我做了一点不同。 我做了…
git reflog 3bd79d2 HEAD@{2}: checkout: moving from edbfb06528c43586a0e0e10a73051e06980b9281 to master edbfb06 HEAD@{3}: commit: added general comments for rubric f8ca172 HEAD@{4}: checkout: moving from 904d63bf08f6f6b1494bfa473b158b9509b18423 to 904d63b HEAD@{10}: commit: updated results page and csv 933f2a6 HEAD@{11}: commit: updates f56e6cd HEAD@{12}: clone: from git@heroku.com:xxxx.git
…在这种情况下,我的“为总评添加了一般评论”是我失去的承诺。 现在我有了提交ID,我用樱桃select回来…
git cherry-pick edbfb06
在git reset --hard
之后,您不需要从另一个repo中推出任何东西git reset --hard
。
git reflog
应该允许你find丢失的提交(实际上没有引用,但是仍然存在于你的Git git config gc.reflogexpire
,默认情况下直到90天:参见git config gc.reflogexpire
。如果你真的想git config gc.reflogexpire
,你甚至可以确保它永不过期 )。
例如参见撤消一个git reset --hard HEAD~1
或restore – git reset --hard HEAD^
作为例子。
尝试inputgit fetch
来获取更新的存储库