我一直在做一个项目。
我最终在我身上发生了一些错误。认为我做了一些愚蠢的事情,我想检查之前的提交。
所以我第一次这样做了:
git add .
git commit -am 'half baked code'
我没有推动它(因为我不确定我是否破坏了任何东西)。
然后我做了:git checkout xdfsfsfs
抓住之前的提交,我知道一切正常。
我不是想回到我未经发送的本地提交。
git reset --hard
似乎让我回到github上的最新提交,但没有回到本地提交。
git log
未显示我的提交
我有没有办法恢复本地提交?或者我只是需要重新编码? :)
答案 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
回到它时,这会给你带来麻烦,因为当你做了初步结账时你就进入了分离头状态 - 这本身很好,但是如果你重置为提交,您将保留在分离头中,这将在您想要提交更多代码时引起麻烦。
你做了结账以离开分店,所以你想做结账以回到分行。