1.1.23. git switch命令

  • 用于在不同的分支之间切换。

  • 自 Git 2.23(2019年8月) 版本引入以来,它旨在提供一个比 git checkout 更直观、更专注的方式来处理分支切换操作,从而简化用户的操作流程并减少混淆。

1. 基本用途

  • 切换到已有的分支:

    git switch 分支名
    
  • 新建并切换到一个新分支(基于当前分支):

    git switch -c 新分支名
    
  • 新建并切换到一个新分支(基于指定起点):

    git switch -c 新分支名 起点
    
  • 进入脱离HEAD状态(Detached HEAD)

    git switch <commit-hash>/<tag_id>

备注

在 Git 中,HEAD 通常指向你当前所在的分支(比如 main 或 dev)。但如果你 checkout 到一个特定提交或标签,而不是分支名,HEAD 就变成“游离状态”,直接指向一个具体的 commit。这意味着你虽然可以查看、修改、提交代码,但你所做的提交不会属于任何分支,很容易“丢失”。假设你此时提交了修改,这个提交不会挂在任何分支上:一旦你切换分支或关闭仓库,这个提交就不容易找回;如果你想保留这些更改,应该新建分支并切换过去再提交。

2. 与 git checkout 的区别

+---------------------+------------------+--------------------+
| 功能                | `git switch`     | `git checkout`     |
+=====================+==================+====================+
| 切换分支            | ✅(推荐使用)    | ✅                  |
+---------------------+------------------+--------------------+
| 创建并切换分支      | ✅                | ✅                  |
+---------------------+------------------+--------------------+
| 还原文件/暂存区内容 | ❌                | ✅                  |
+---------------------+------------------+--------------------+
| 使用体验            | 更清晰,语义明确 | 功能过多,容易混淆 |
+---------------------+------------------+--------------------+

备注

git switch 专注于“分支切换”,而 git restore 专注于“文件还原”,这两个命令共同代替了 git checkout 的大多数用途。

常用示例

# 切换到已有的 dev 分支
git switch dev

# 创建并切换到 feature/login 分支
git switch -c feature/login

# 从远程分支 origin/dev 创建并切换到本地分支 dev
git switch -c dev origin/dev