我在尝试解决git上的问题时,不小心使用了git reset --hard命令回退到之前的某一次提交。现在我无法回到旧的head。
不过,在执行这个操作之前,我已经克隆了存储库,并将缺失的提交推送回原始版本库。昨天看起来似乎解决了问题,但是今天我发现原始版本仍然停留在旧的提交状态,新的提交似乎不存在。 再次尝试从克隆版本库推送新的提交,但是git告诉我一切都是最新的。
我该如何解决这个问题?
我在尝试解决git上的问题时,不小心使用了git reset --hard命令回退到之前的某一次提交。现在我无法回到旧的head。
不过,在执行这个操作之前,我已经克隆了存储库,并将缺失的提交推送回原始版本库。昨天看起来似乎解决了问题,但是今天我发现原始版本仍然停留在旧的提交状态,新的提交似乎不存在。 再次尝试从克隆版本库推送新的提交,但是git告诉我一切都是最新的。
我该如何解决这个问题?
git reflog
命令获取 HEAD 最近所在的位置列表。git show sha1
命令查找你想要的 HEAD 所在的位置。git merge
命令将主分支恢复到正确的位置。一些解释:在 git 提交中,没有任何东西指向其后面发生的提交。当你重置 HEAD 时,它指向了一个较旧的提交。你之前的 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,我使用了cherry-pick将其恢复。
git cherry-pick edbfb06
在执行git reset --hard
之后,您不应该需要从另一个存储库推送任何内容。
git reflog
可以帮助您找到丢失的提交记录(实际上是未引用的,但仍然存在于您的Git存储库中,默认情况下保留90天:请参阅git config gc.reflogexpire
。如果您确实希望如此,甚至可以确保它永远不会过期)。
例如,请参见撤消git reset --hard HEAD~1
或恢复 - git reset --hard HEAD^
。
git fetch
以获取更新的存储库。
git cherry-pick the sha1's
- Ashish Sajwan