Git撤销提交操作

Git撤销提交操作

引言

提交错了、提交了不该上传的文件、commit message写错,都是日常开发常见情况。Git提供多种撤销方式,关键是分清:还没push的本地提交和已经推到远程的提交,处理方式完全不同。

场景一:改错还没add

工作区改动想放弃:

git checkout -- 文件名      #旧写法
git restore 文件名          #新写法

整个工作区全部还原:git restore .

场景二:add了但没commit

把文件撤出暂存区,保留改动:

git reset HEAD 文件名
git restore --staged 文件名

场景三:commit了但没push

改最后一次提交信息:

git commit --amend -m "新的提交说明"

撤销最近一次提交,改动留在工作区:

git reset --soft HEAD^    #撤销提交,代码保留在暂存区
git reset --mixed HEAD^   #默认,撤销提交,代码退回工作区
git reset --hard HEAD^    #撤销提交并丢弃改动,慎用

场景四:已经push到远程

本地reset后强推会改写历史,团队共用分支风险大,推荐用反向提交:

git revert 提交ID

revert会生成一个新提交,把那次改动反向抵消,不改写历史,安全协作。

注意事项

  • --hard会丢代码,操作前先备份或开分支;
  • 已push到共享分支不要随意reset强推;
  • amend只用于未推送的本地提交;
  • 查看历史用git log --oneline定位提交ID。

总结

未add用restore,add未commit用reset HEAD撤出,本地commit用reset(soft/mixed保留代码,hard丢弃),已push用revert新增反向提交。记住本地和远程的区别,避免改写团队历史。


emer 发布于  2026-10-18 07:29