如何在Git中撤销revert操作?误执行git revert失败解决方法
问题根因
你一开始就用错命令了。git revert的作用是生成一个全新的提交,完全抵消指定提交的所有改动,根本不是用来删除本地未推送提交的——你第一次跑git revert <last commit>的时候,它自动生成了反向提交,把你上次提交里加的所有项目文件全删掉,这不是出bug了,就是这个命令的设计逻辑。
后面二次revert失败也很正常:当时你工作区有未提交的改动,Git为了避免冲突覆盖你的本地修改,会直接阻断revert流程。就算你后来临时交了个"trying to fix this"的提交,只要工作区、暂存区还有残留的冲突标记或者未处理的文件改动,revert还是跑不通。
快速恢复代码(不会丢任何文件)
你所有提交都没推送到远程,根本不用来回revert绕圈子,直接重置到存了完整项目的那个提交就行:
- 先执行命令拉取完整提交日志,找到你当初第一次提交所有项目新增文件的那条提交记录,复制它的哈希值(每条提交前面的那串十六进制字符串):
git log --oneline - 执行软重置,把分支指针切回那个存了完整项目的提交,所有项目文件都会原封不动留在本地,之前乱操作生成的两个错误提交会被直接清掉,不会留在提交历史里:
跑完这步你之前被删掉的文件就全回来了。git reset --soft <刚才复制的完整项目提交哈希>
拆分小粒度提交的正确操作
重置完成后按下面的步骤拆分提交就行,非常简单:
- 先把暂存区的所有改动放回工作区:
git reset - 每次只选一部分相关的文件加入暂存区,比如先提交项目配置和依赖文件:
git add config/ package.json pnpm-lock.yaml git commit -m "feat: 初始化项目配置与依赖" - 重复上面的add和commit操作,按功能模块、代码逻辑分批次提交剩余内容就行:比如下次提交通用工具函数,再提交核心业务模块,最后提交静态资源和文档,粒度可以自己控制。
后续避坑
- 本地还没push的提交想撤回、修改,用
git reset,别用git revert。git revert是给已经推送到远程、多人协作的提交准备的:它不会修改已有提交历史,只会新增一个反向提交来抵消改动,不会影响其他协作者的本地仓库,用在本地未推送的提交上纯属给自己找麻烦。 - 要是怕重置操作搞丢代码,可以操作前先建个临时备份分支:
git branch temp-backup,就算操作错了切回这个备份分支就能把所有代码找回来。
内容的提问来源于stack exchange,提问作者badhabit16
相关产品推荐
相关产品推荐

