Git撤销commit回退版本命令详解
提交写错、信息填错、误把不该提交的文件 commit 上去,是 Git 日常最高频的失误。关键要先分清两件事:commit 还没推送到远程,用 reset 本地回退;已经推送到共享分支,用 revert 生成一个反向提交,不要硬改历史。选错命令轻则改乱本地,重则让队友拉取冲突。本文把常用撤销和回退命令讲清。
一、查看提交历史
先看清楚要回退到哪:
git log --oneline
a1b2c3d 最新提交
f4e5d6c 上一个提交
9a8b7c6 更早提交
二、只改提交信息(未推送)
刚 commit 完发现 message 写错,不改内容:
git commit --amend -m '正确的提交信息'
三、撤销最近一次 commit,保留改动(未推送)
--soft 回退到上一次提交,但改动留在暂存区,可以重新提交:
git reset --soft HEAD~1
--mixed(默认)回退并把改动放回工作区、取消暂存:
git reset --mixed HEAD~1
--hard 彻底丢弃最近一次提交的所有改动,慎用:
git reset --hard HEAD~1
回退到指定提交:
git reset --hard f4e5d6c
四、已推送到远程:用 revert
共享分支上别用 reset 强推,改用 revert 生成一个抵消提交:
git revert HEAD
git revert f4e5d6c
它保留完整历史,新增一条「反向提交」,队友正常 pull 即可。
五、误提交文件的处理
把不该提交的文件加进去了,未推送时:
# 从暂存区移除但保留本地文件
git reset HEAD 文件名
# 或直接编辑后重新提交
git rm --cached 文件名
git commit --amend
六、三种 reset 参数对比
--soft:撤销 commit,改动留在暂存区。--mixed:撤销 commit,改动退回工作区(默认)。--hard:撤销 commit 并删除改动,不可恢复。
常见坑
- 已 push 的分支用
reset --hard再强推,会覆盖别人的提交,必须用 revert。 reset --hard丢弃的改动若没备份,工作区改动直接消失。- amend 会生成新 commit,已推送的提交 amend 后哈希变化,团队协作会乱。
- HEAD~1 表示上一个,HEAD~2 表示倒数第二个,别数错。
- 回退后想找回,可用
git reflog查看历史操作记录。 - 在公共分支强推前务必和团队确认,避免他人仓库历史分叉。
总结
未推送:改信息用 amend,保留改动用 reset --soft/--mixed,彻底丢弃用 --hard。已推送共享分支:一律 revert 生成反向提交。拿不准先 git log、git reflog 确认,再决定回退方式。
遇到问题加QQ23979811 协助处理