Command Reference

git switch 教程

介绍 git switch 如何负责切换和创建分支,以及它相对 checkout 更清晰的职责边界。

适合谁看
  • 已经会基本提交和分支操作的开发者
  • 想理解命令边界与风险的人
前置知识
  • 知道工作区、暂存区、提交的基本关系
  • 能读懂 `git status` 和简单历史图
常见风险
  • 误把本地整理命令用到共享历史
  • 在没确认恢复路径前直接继续改写历史

一句话理解

git switch 是专门负责“切分支”的命令,它把这项职责从旧式的 git checkout 中拆了出来。

为什么需要 switch

checkout 既能切分支,也能恢复文件,语义过于宽。官方后来提供 switchrestore,就是为了让“切换分支”和“恢复路径”这两类操作更不容易混淆。

最常见用法

切到已有分支

git switch feature/login

创建并切换到新分支

git switch -c feature/login

这和旧写法 git checkout -b feature/login 的目的相同,但更容易理解。

切回上一个分支

git switch -

在两个分支之间快速来回切换时非常高频。

当 Git 拒绝切换时

如果当前工作区改动会在切换时被覆盖,Git 会直接阻止操作。这是一种保护机制,不是故障。

常见处理方式有三种:

  1. 先提交
  2. 先 stash
  3. 你明确知道可以丢弃时,使用 --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 与工作区的同步switch 把 HEAD 指向目标分支引用,同时替换工作区文件,确保内容与目标分支一致。
输入
目标分支/提交当前工作区状态
产出
HEAD 指向目标分支工作区文件更新为目标分支内容
如果工作区有未提交的改动且切换会导致覆盖,Git 会拒绝操作——这是一种保护机制。

特殊情况与边界

  • 工作区有未提交改动且目标分支与当前分支在这些文件上不一致时,Git 会拒绝切换以保护数据。处理方式是先提交、stash,或确认可以丢弃时使用 --discard-changes
  • git switch -c 创建新分支时基于当前 HEAD,如果当前 HEAD 是 detached 状态,新分支会从那个提交开始。
  • 进入 detached HEAD 模式(--detach)后如果继续提交,记得尽快创建分支把实验结果接住,否则容易被垃圾回收清理。
  • 切换分支不会改变提交历史,它只是改变当前正在工作的开发线和对应的文件内容。