Git 中文手册

git checkout 和 git switch 的区别:新手该用哪个

2026-09-06 约 3 分钟阅读

git checkout 身兼数职容易混淆,Git 2.23 推出了更清晰的 git switch 和 git restore。本文讲清 switch/restore/checkout 的分工,以及为什么新项目推荐用 switch。

场景:你常看到两种写法切分支——git checkoutgit switch,想知道区别、该用哪个。这背后其实是 Git 一次重要的命令重构。

背景:checkout 太"万能"了

老版 git checkout 一个命令干了好几件事,容易混淆:

git checkout main          # 切分支
git checkout -b new        # 建分支并切换
git checkout 某文件.txt      # 恢复文件(?!)
git checkout 某提交          # 检出历史提交

同一个词既能切分支、又能恢复文件,初学易错。于是 Git 2.23 拆分成两个职责单一的命令:

新命令分工

命令职责
git switch只负责切换/创建分支
git restore只负责恢复文件/暂存区
git switch main            # 切分支(等价 checkout main)
git switch -c new          # 建并切(等价 checkout -b new)
git restore 某文件.txt       # 恢复文件(等价 checkout -- 某文件)

常用对照表

想做的事新写法旧写法
切换分支git switch 分支git checkout 分支
创建并切换git switch -c 分支git checkout -b 分支
切换到上次分支git switch -git checkout -
从远程拉新分支并切换git switch -c 分支 origin/分支git checkout -b 分支 origin/分支
恢复工作区文件git restore 文件git checkout -- 文件
取消暂存git restore --staged 文件git reset HEAD 文件

新手建议:用 switch 切分支

# 推荐日常
git switch main
git switch -c feature/login

# 查看分支
git branch
git switch -        # 快速回上一个分支

保留 checkout 的场景

checkout 并未废弃,仍有 switch 不具备的用法:

git checkout 某提交哈希    # 检出历史提交(游离状态,switch 不支持)
git checkout 标签名        # 检出标签

需要检出具体提交/标签时,仍用 checkout。

常见问题

  • 提示 Unknown switch 或无法识别:Git 版本太老,升级或改用 checkout。
  • 想切换但工作区有未提交改动:Git 会阻止切换到冲突分支,先 git stash 或提交。
  • IDE 里显示的是 checkout 还是 switch:很多工具内部仍用 checkout,不影响你命令行习惯。

一句话速记

Git 2.23+ 用 git switch 切分支、git restore 恢复文件;旧版/检出提交仍用 git checkout

?

常见问题 FAQ

git switch 和 git checkout 都能切换分支吗?
都能。但 checkout 除了切分支还能恢复文件、切换 commit,职责过多易误用。switch 只专注"切换分支",语义更清晰,是 Git 2.23+ 推荐写法。
我的 Git 版本不支持 switch 怎么办?
switch 需要 Git 2.23+(2019年8月发布)。老版本用 git checkout 代替,功能一样。可用 git --version 查看版本。
git switch -c 和 git checkout -b 区别?
等价,都是"创建并切换新分支"。switch -c 是新写法,checkout -b 是旧写法,效果相同。
想恢复被误删/误改的文件该用哪个命令?
用 git restore 文件(新)或 git checkout -- 文件(旧)。restore 专门负责恢复文件,不再和切分支混淆。切分支用 switch,恢复文件用 restore。