Git丢失提交记录

40

我在尝试解决git上的问题时,不小心使用了git reset --hard命令回退到之前的某一次提交。现在我无法回到旧的head。

不过,在执行这个操作之前,我已经克隆了存储库,并将缺失的提交推送回原始版本库。昨天看起来似乎解决了问题,但是今天我发现原始版本仍然停留在旧的提交状态,新的提交似乎不存在。 再次尝试从克隆版本库推送新的提交,但是git告诉我一切都是最新的。

我该如何解决这个问题?

4个回答

62
为了将 HEAD 放回正确的位置:
  1. 使用 git reflog 命令获取 HEAD 最近所在的位置列表。
  2. 使用 git show sha1 命令查找你想要的 HEAD 所在的位置。
  3. 一旦找到想要的提交,使用 git merge 命令将主分支恢复到正确的位置。

一些解释:在 git 提交中,没有任何东西指向其后面发生的提交。当你重置 HEAD 时,它指向了一个较旧的提交。你之前的 HEAD 现在变成了“悬挂”的状态,没有任何指向它的东西。

我们使用 reflog 查看 HEAD 最近所在的位置。一旦将其设置回想要的位置,就将主分支或其他分支指向该位置,一切都会恢复正常!


2
git cherry-pick the sha1's - Ashish Sajwan

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

在这种情况下,我丢失了“用于规则的附加一般注释”的提交。现在我有了提交ID,我使用了cherry-pick将其恢复。

git cherry-pick edbfb06

5

-8
尝试输入git fetch以获取更新的存储库。

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