我试图在git中修复一个问题并且意外地使用git reset --hard来进行一些先前的提交。所以现在我无法回到旧脑袋。
但是在我这样做之前我确实克隆了存储库,因此我将丢失的提交推回原始版本。这似乎在昨天工作,但今天我看到原来仍然坚持旧的提交,新的似乎不存在。 试图再次从克隆中推送新提交不起作用,因为git告诉我一切都是最新的。
我该如何解决这个问题?
答案 0 :(得分:59)
让你的HEAD回到正确的位置:
git reflog
获取最近HEAD 的列表。git show sha1
找到你想要HEAD的地方。git merge
让您的主人回到正确的位置。一些解释:在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~1
或restore - git reset --hard HEAD^
作为示例。
答案 3 :(得分:-8)
尝试键入git fetch
以获取更新的存储库