Git失去了承诺

ggg*_*ggg 40 git

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

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

我该如何解决?

And*_*ndy 60

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

  1. git reflog得到的,其中头部有一个列表最近.
  2. git show sha1 找到你想要你的HEAD的地方.
  3. 找到想要的提交后, git merge让主人回到正确的位置.

一些解释:在一个git提交中,没有任何东西将一个提交指向它之后发生的提交.重置HEAD时,您将其指向较旧的提交.你以前的头现在正悬空 而没有任何指向它的东西.

我们reflog用来看看HEAD最近在哪里.一旦它被设置回你想要的地方,你就把主人或其他一些分支指回那个地方,一切都很顺利!

  • `git cherry-pick the sha1's (2认同)

Mar*_*ear 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
Run Code Online (Sandbox Code Playgroud)

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

git cherry-pick edbfb06
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 5

你之后不应该从另一个仓库推出任何东西git reset --hard.

git reflog应该允许你找到丢失的提交(实际上是未引用的,但仍然存在于你的Git仓库中,默认情况下为90天:请参阅git config gc.reflogexpire.如果你真的想要它,你甚至可以确保它永不过期).
例如,请参阅撤消git reset --hard HEAD~1恢复 -git reset --hard HEAD^作为示例.