如何撤销本地所有提交,恢复至远程master分支的最新版本?
解决方法:彻底恢复到远程master分支的最新版本
别担心,你之前用git checkout 84acc42 .的操作确实会留下隐患——它只是替换了工作区的文件,但本地分支的提交历史还是停留在合并后的状态,后续推送时大概率会因为历史冲突被拒绝。下面给你两种更稳妥的方案,帮你彻底回到远程master的干净状态:
方案一:使用git reset --hard(推荐)
这是最直接的方式,会把本地分支的HEAD指针、索引区、工作区完全重置为远程master的最新状态,彻底抹掉本地提交和合并的痕迹:
- 第一步:如果本地有未提交的修改,先暂存起来(避免丢失):
(之后需要恢复的话,执行git stashgit stash pop即可) - 第二步:拉取远程master的最新提交信息(确保本地拿到最新的远程状态):
git fetch origin - 第三步:重置本地分支到远程master的最新版本:
执行完这条命令后,你的本地仓库就和远程master完全一致了,之前的本地提交和合并操作都会被清除,后续修改推送也不会有问题。git reset --hard origin/master
方案二:如果已经执行过git checkout <commit> .
如果你已经用了checkout命令替换了工作区文件,也不用慌,直接执行方案一的步骤即可——git reset --hard会覆盖当前的工作区状态,帮你回到正确的远程版本。
注意:
git reset --hard会丢弃所有未提交的本地修改,所以一定要确认你没有需要保留的未提交内容,或者提前用git stash暂存!
内容的提问来源于stack exchange,提问作者Martin AJ




