Appearance
Git checkout、switch 与 restore 的用法与区别
- 状态:已验证
- 来源:对话整理
- 更新时间:2026-03-19
关键结论
git checkout是多功能历史命令,不推荐作为日常主力命令。git switch专用于分支切换,语义清晰,适合日常使用。git restore专用于文件恢复,替代checkout的文件操作场景。- 在工程实践中,应把分支操作和文件操作彻底分离。
- 本条目只讨论命令职责拆分和基本用法,不展开本地分支删除 warning 或远程跟踪分支的概念。
详细分析
git checkout同时承担多种职责,包括:- 分支切换
- 文件恢复
- 创建分支
- 由于参数形式相近,
checkout容易把“切分支”和“恢复文件”混淆,误操作风险更高。 - Git 2.23 引入
switch与restore,本质是把checkout的职责拆分:switch只处理分支切换restore只处理工作区和暂存区内容恢复
switch和restore的价值不只是语法更短,而是把命令意图显式化,降低认知负担。- 在老版本 Git 或旧脚本中,
checkout仍可能需要保留,但新项目应优先采用拆分后的命令。 - 如果你正在排查“分支删除时为什么提示
merged to remote but not HEAD”,应查看 branch.md,而不是在本条目里继续推导删除逻辑。
可执行步骤
- 使用
git switch main切换到目标分支。 - 使用
git switch -c feature创建并切换到新分支。 - 使用
git switch -切换到上一个分支。 - 使用
git restore file.c恢复工作区文件。 - 使用
git restore --staged file.c从暂存区移除文件改动。
命令 / 配置 / 代码
旧写法,不推荐:
bash
git checkout main
git checkout -b feature
git checkout -- file.c新写法,推荐:
bash
git switch main
git switch -c feature
git restore file.c
git restore --staged file.c风险与注意事项
git checkout file可能覆盖未提交修改。git restore默认会覆盖工作区内容,使用前要确认目标文件。- 老版本 Git(低于 2.23)不支持
switch和restore。 - CI 脚本或遗留工具链中仍可能需要保留
checkout。 - 分支删除、远程跟踪分支和
HEAD判定属于不同主题,不要继续在本条目中扩展。