如何在 Git 硬重置后恢复最后一次提交?

23

在硬重置之后,我是否可以恢复以下提交?

步骤:

1) $ (master) // ....made a bunch of changes to files thinking I was working on a branch
2) $ git checkout -b 001-branch  // copy changes to a branch to work with
3) $ (001-branch) // make some more changes to files
4) $ (001-branch) git commit -a -m 'added and changed stuff'
// at this point I was just going to pull force master to latest then rebase my 001-branch off of original master (not the stuff I had modified)
5) $ (001-branch) git checkout master
6) $ (master) git reset --hard HEAD
7) $ (master) git pull
8) $ (master) git checkout 001-branch // go back to my branch and rebase my changes
9) $ (001-branch) // oops...my changes were all kiboshed and I don't see the commit I did per git lg

有没有办法从这个混乱中恢复我的更改?

2
几个问题:(1)第4步中的提交是否成功?(2)您在第8步实际上进行了rebase操作吗,还是还没有?(3)“ all kiboshed”是什么意思?您是否能看到第4步中的提交?它是否被破坏了,还是只是丢失了?(4)在001-branch上,您是否在git reflog中看到了您的提交?reflog通常是解决此类问题的常见方法。 - Greg Hewgill
这个回答解决了你的问题吗?从git reset --hard中恢复? - Liam
4个回答

27

要查看对001分支所做的所有更改,可以执行git reflog 001-branch命令,但有可能你认为你在001分支上所做的更改实际上是在另一个分支上进行的,因此你可能需要使用git reflog查看所有更改。


21

git reflog show显示缺失提交的哈希值吗?如果是,那么git checkout -b recovery-branch commitId将创建一个指向缺失提交的新分支。您可以按需进行合并。


7

每当Git做出像更改或倒回分支这样的重大操作时,它都会在reflog中记录下来。换句话说,请仔细检查git reflog输出,它会告诉你分支曾经拥有过的所有转换。然后你可以使用git show commit_id来检查并使用git checkout commit_id回到该版本。


4
说实话,我不明白发生了什么。 git reflog 显示一个分支指向的提交记录。 你可以使用它来查找最近本地提交的 SHA1 值。

我可以将该提交还原到我的主代码历史记录中吗? - Vitaly Zdanevich

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