问题点:
本地操作git,不小心点了reset current branch to here操作,导致把本地的代码回退到了某一个历史的提交版本中,这个命令会移动当前分支的指针(HEAD)到指定的提交,根据提交时的不同选项,会改变工作目录和暂存区的内容。
但是如果一不小心,误操作了reset current branch to here怎么办,不要慌,只要你没提交覆盖远程分支的代码都好办,那么如何去进行恢复呢,现在教你如何操作。
温和解决方式:
撤销操作之前,首先需要弄清楚你要撤销之前对应的提交ID是啥,此时你先检查 Git 的引用日志(使用git查询提交日志命令),以查看 HEAD 的历史移动记录。这可以帮助你确定之前 HEAD 的位置,并尝试恢复它。也可以直接去远程git仓库中查看最新的提交ID,以用来恢复到这个ID。
git reflog
或
git log -g
找到了最新的提交ID后,比如最新的提交ID是999,那么就通过git reset --撤销策略参数 999 命令来恢复到你误操作之前的ID上,注意,这里的撤销策略参数是用哪个取决于你误操作时选的是哪种策略,要对应起来,比如误操作是选的是Mixed,那么这里命令就是
git reset --Mixed 999
TIP:撤销 git reset
的影响取决于你执行的是哪种类型的 reset
(软、混合或硬)。以下是针对不同类型 reset
的撤销策略:
- 软重置 (Soft Reset):
如果你执行的是软重置,那么只是 HEAD 指针移动了,工作目录和暂存区的内容没有改变。要撤销软重置,你可以使用git reset
命令再次移动 HEAD 指针回到原来的位置。例如,如果你软重置到了HEAD~1
,那么可以使用git reset HEAD@{1}
来撤销这次操作(HEAD@{1}
是 Git 的引用日志中的一个条目,表示之前 HEAD 的位置)。 - 混合重置 (Mixed Reset):
混合重置会移动 HEAD 指针,并重置暂存区的内容,但工作目录的内容保持不变。要撤销混合重置,你需要先恢复暂存区的内容(如果可能的话),然后再次移动 HEAD 指针。恢复暂存区的内容可能比较复杂,可能需要手动比较和恢复文件。 - 硬重置 (Hard Reset):
硬重置会移动 HEAD 指针,并重置暂存区和工作目录的内容。撤销硬重置通常是最困难的,因为工作目录的内容也被改变了。如果你没有备份或引用日志中的记录,那么可能无法完全恢复之前的状态。你可能需要手动比较和恢复文件,或者使用其他版本的控制系统(如版本历史中的其他分支或标签)来恢复文件。
执行完之后本地的变更目录中会出现差异代码,此时需要你手动归并下代码,如果你本地没有新增的代码,你想把远程的代码直接覆盖本地,那么就选中,然后Rollback覆盖本地(注意这里会覆盖你本地写好而未提交的代码)
粗暴解决方法:
其实上面的操作就是找到误操作前的提交ID,然后重置到该分支,如果你觉得麻烦,那么你基于该提交ID直接重新拉个新的本地分支得了
git branch newBranceName 999