我一直在编写一些IT相关的代码,并使用git进行管理。早些时候,我使用commit保存了一个可运行的代码版本。后来,由于需要添加新功能并且设计不佳,我决定重新编写代码。在成功完成后,我又进行了一次git commit。在执行git log命令后,我发现自己没有处于任何分支上。于是,我执行了"git checkout master"命令,这将我带回到旧代码版本,并且git log显示了我的最新提交。这是非常繁琐的工作,所以我想知道是否有方法可以撤销我的操作,恢复到最新的代码版本。感谢您的帮助。
查看 git reflog
,找到你的提交记录。
最安全的方法是在“丢失”的提交上创建一个分支,然后使用 gitk
或 git log -p
来检查是否一切正常。
git branch recovery HEAD@{1} # use whatever commit you need
git log -p recovery
这个新分支可以合并,可以在主分支上变基,它的提交可以挑选出来等等。在 Git 中有许多可能会踩到自己的坑,但也有更多种方法重新连接脚(可能连接到你的手臂上)。
如果您在主分支上没有进行任何新的提交,您可以简单地将该提交合并,Git 会将其解决为快进式合并:
git merge HEAD@{1} # use whatever commit you need
如果你不关心主分支上的任何新提交,只想将主分支重置为那个丢失的提交,请使用git reset。为了不丢失任何更改,请先将更改暂存到你的工作副本中(git stash save
)。
git reset --keep HEAD@{1}
下次发现自己不在任何分支上时,请使用git branch newbranch
或git checkout -b newbranch
git reset --hard/--keep
。如果您真的不想创建新分支,可以在恢复更改后删除它,或者移动主分支(git reset
或 git branch -f
)。 - knittlgitk
或 git log -p
)。验证完毕后,您可以随时重置您的主分支并删除临时的“恢复”分支。 - knittl使用 git reflog
命令,获取你的新提交的 SHA(或者你可以以 HEAD@{1}
的格式引用它),然后使用 git cherry-pick
、git merge
等命令将该提交合并到主分支。