Git失去了提交

我试图解决一个问题在GIT中,并意外地使用Git重置 – 一些以前的承诺。 所以,现在我不能回到老头。

然而,在我做这件事之前,我已经克隆了存储库,所以我把丢失的提交回原来的。 这似乎昨天工作,但今天我看到,原来仍然坚持一个旧的承诺,新的似乎并不存在。 试图从克隆再推新的提交不起作用,因为git告诉我一切都是最新的。

我该如何解决?

为了让你的HEAD回到正确的位置:

  1. git reflog来获取HEAD最近的列表。
  2. git show sha1find你想要的HEAD的位置。
  3. 一旦你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来获取更新的存储库