Git失去了承诺

时间:2011-07-16 16:20:09

标签: git

我试图在git中修复一个问题并且意外地使用git reset --hard来进行一些先前的提交。所以现在我无法回到旧脑袋。

但是在我这样做之前我确实克隆了存储库,因此我将丢失的提交推回原始版本。这似乎在昨天工作,但今天我看到原来仍然坚持旧的提交,新的似乎不存在。 试图再次从克隆中推送新提交不起作用,因为git告诉我一切都是最新的。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:59)

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

  1. git reflog获取最近HEAD 的列表。
  2. git show sha1找到你想要HEAD的地方。
  3. 找到您想要的提交后,git merge让您的主人回到正确的位置。
  4. 一些解释:在git提交中,没有任何内容指向一个提交后发生的提交。重置HEAD时,您将其指向较旧的提交。你以前的头现在悬空没有任何指向它的东西。

    我们使用reflog来查看HEAD最近的位置。一旦它被设置回你想要的地方,你就把主人或其他一些分支指回那个地方,一切都很好!

答案 1 :(得分:25)

我做的有点不同。我做了......

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

...在这种情况下,我的“添加了对rubric的一般性评论”是我丢失的提交。现在我有了提交ID,我使用了cherry-pick来取回它......

git cherry-pick edbfb06

答案 2 :(得分:5)

您不需要在git reset --hard之后从其他仓库中推送任何内容。

git reflog 应该允许您找到丢失的提交(实际上是未引用的,但仍然存在于您的Git仓库中,默认情况下为90天:请参阅git config gc.reflogexpire。如果你真的想要,你甚至可以make sure it never expires 例如,请参阅Undoing a git reset --hard HEAD~1restore - git reset --hard HEAD^作为示例。

答案 3 :(得分:-8)

尝试键入git fetch以获取更新的存储库