Git 回退到某个 commit
核心总结:如何选择?
先给你一个快速决策指南:
- 只想看看旧版本的代码,不修改历史:用
git checkout。 - 本地分支搞砸了,想彻底删除最近的提交(未推送到远程):用
git reset。 - 已经推送到远程的提交需要撤销,且需要保留撤销记录(安全):用
git revert。
方法一:git reset (重置)
git reset 会移动 HEAD 指针,可以用来彻底'抹掉'某个 commit 之后的所有提交。它会修改历史记录。
适用场景:仅限私有分支/本地分支。如果你回退的 commit 已经被推送到了远程共享分支(如 main 或 develop),请不要使用 git reset,因为它会造成其他协作者的历史记录混乱。
git reset 的三种模式:
假设你的提交历史是 A - B - C - D (当前在 D),你想回退到 B。
--soft(软重置)- 命令:
git reset --soft <commit-id> - 效果:
- 将
HEAD指针移动到<commit-id>。 - 保留
C和D的代码更改,并将它们放回暂存区 (Staging Area)。 - 你的工作目录代码不变。
- 将
- 用途: 你想撤销最近的几次提交,但想把这些更改重新组织成一个新的提交。
- 命令:
--mixed(混合重置,默认模式)- 命令:
git reset --mixed <commit-id>或git reset <commit-id> - 效果:
- 将
HEAD指针移动到<commit-id>。 - 保留
C和D的代码更改,但将它们放回工作目录 (Working Directory),而不是暂存区。 - 暂存区被清空。
- 将
- 用途: 你想撤销提交,并且重新检查和修改这些代码,然后再决定如何提交。
- 命令:
--hard(硬重置,最常用也最危险)- 命令:
git reset --hard <commit-id> - 效果:
- 将 指针移动到 。
- 命令:

