- 已经会基本提交和分支操作的开发者
- 想理解命令边界与风险的人
Command Reference
git switch 教程
介绍 git switch 如何负责切换和创建分支,以及它相对 checkout 更清晰的职责边界。
- 知道工作区、暂存区、提交的基本关系
- 能读懂 `git status` 和简单历史图
- 误把本地整理命令用到共享历史
- 在没确认恢复路径前直接继续改写历史
一句话理解
git switch 是专门负责“切分支”的命令,它把这项职责从旧式的 git checkout 中拆了出来。
为什么需要 switch
checkout 既能切分支,也能恢复文件,语义过于宽。官方后来提供 switch 和 restore,就是为了让“切换分支”和“恢复路径”这两类操作更不容易混淆。
最常见用法
切到已有分支
git switch feature/login
创建并切换到新分支
git switch -c feature/login
这和旧写法 git checkout -b feature/login 的目的相同,但更容易理解。
切回上一个分支
git switch -
在两个分支之间快速来回切换时非常高频。
当 Git 拒绝切换时
如果当前工作区改动会在切换时被覆盖,Git 会直接阻止操作。这是一种保护机制,不是故障。
常见处理方式有三种:
- 先提交
- 先 stash
- 你明确知道可以丢弃时,使用
--discard-changes
detached HEAD 也可能通过 switch 进入
git switch --detach <commit>
这适合临时检查历史提交。只要你在这个状态下产生了值得保留的新提交,记得马上新建分支把它接住。
switch 和 checkout 的边界
switch:切分支restore:恢复文件checkout:旧式多用途命令
对于新内容体系或团队培训材料,优先教 switch 往往更清晰。
这条命令在流程里解决什么问题
git switch 专门负责切换和创建分支。它把 HEAD 指向新的分支引用,并同步更新工作区文件以匹配目标分支的最新状态。与旧式的 checkout 不同,它只做一件事——切换分支,语义清晰且不会意外恢复文件。
典型用例
- 切换到已有分支(
git switch <branch>),同时更新工作区文件以匹配目标分支的内容。 - 创建并切换到新分支(
git switch -c <new>),基于当前提交创建新开发线。 - 快速切回上一个分支(
git switch -),在两个分支间来回切换时非常方便。 - 以 detached HEAD 模式查看历史提交(
git switch --detach <commit>),适合临时检查。
图例理解
目标分支/提交当前工作区状态
HEAD 指向目标分支工作区文件更新为目标分支内容
如果工作区有未提交的改动且切换会导致覆盖,Git 会拒绝操作——这是一种保护机制。
特殊情况与边界
- 工作区有未提交改动且目标分支与当前分支在这些文件上不一致时,Git 会拒绝切换以保护数据。处理方式是先提交、stash,或确认可以丢弃时使用
--discard-changes。 git switch -c创建新分支时基于当前 HEAD,如果当前 HEAD 是 detached 状态,新分支会从那个提交开始。- 进入 detached HEAD 模式(
--detach)后如果继续提交,记得尽快创建分支把实验结果接住,否则容易被垃圾回收清理。 - 切换分支不会改变提交历史,它只是改变当前正在工作的开发线和对应的文件内容。