Git恢复本地提交

时间:2018-01-31 15:24:57

标签: git github

我一直在做一个项目。

我最终在我身上发生了一些错误。认为我做了一些愚蠢的事情,我想检查之前的提交。

所以我第一次这样做了:

git add .
git commit -am 'half baked code'

我没有推动它(因为我不确定我是否破坏了任何东西)。

然后我做了:

git checkout xdfsfsfs 

抓住之前的提交,我知道一切正常。

我不是想回到我未经发送的本地提交。

git reset --hard

似乎让我回到github上的最新提交,但没有回到本地提交。

git log未显示我的提交

我有没有办法恢复本地提交?或者我只是需要重新编码? :)

3 个答案:

答案 0 :(得分:3)

您正在寻找git reflog

这显示了即使没有保存也会在git中执行的所有操作。

为了解决这个问题,你想要做

git reflog

找到您之前提交的提示

git checkout SHA

git checkout -b mycommit

现在您可以将其合并到主人或任何需要的地方。

答案 1 :(得分:1)

git reflog救援!此命令将显示HEAD最近指向的提交。

您可以逐个检查它们,当您找到所需的那个时,只需git reset --hard <HASH>即可。通缉<HASH>右侧的评论类似于checkout: moving from <previous branch> to xdfsfsfs

您也可以使用HEAD@{3}表示法,但我建议不要使用它,因为每次更改HEAD@{3}HEAD的含义都会发生变化。

与脚注一样,您也可以使用git reflog <branch>,它会显示该分支指向的位置。如果没有分支名称,它将显示reflog的{​​{1}}。

答案 2 :(得分:0)

当你做了

git checkout xdfsfsfs

改变了HEAD;但它没有改变任何分支。所以你要做的就是在你做之前回到你所在的分支。例如,如果您要对master进行更改,那么您只需说明

git checkout master

如果您“丢失”了提交,则其他答案表明reflog将适用,例如通过重置远离它的分支。当他们告诉你找到提交并且reset回到它时,这会给你带来麻烦,因为当你做了初步结账时你就进入了分离头状态 - 这本身很好,但是如果你重置为提交,您将保留在分离头中,这将在您想要提交更多代码时引起麻烦。

你做了结账以离开分店,所以你想做结账以回到分行。