Git 2.23新增命令switch使用指南

为了拆分 git checkout 这个"多功能"命令,使其更安全、语义更清晰,Git 在 2.23版本(2019年) 引入了两个新的专用命令:git switchgit restore

简单来说,git checkout 的职责被一分为二:

  • git switch :专用于切换和创建分支
  • git restore :专用于恢复文件(撤销工作区或暂存区的更改)。

使用新命令可以避免因文件和分支同名导致的误操作,也更符合"一个命令只做一件事"的原则。

📝 新旧命令对比与用法速查

下面这个表格清晰地展示了新旧命令的对应关系,你可以根据需要选择性替换旧命令。

功能 新命令(推荐) 旧命令 (git checkout) 示例与说明
切换分支 git switch <分支名> git checkout <分支名> git switch main 切换到 main 分支。
创建并切换到新分支 git switch -c <新分支名> git checkout -b <新分支名> git switch -c feature-x 从当前提交创建新分支。
切换到远程分支 git switch --track origin/<分支名> git checkout -b <分支名> origin/<分支名> 先执行 git fetch,然后 git switch --track origin/feature-x 会创建本地跟踪分支。
快速切换回上一个分支 git switch - git checkout - 在A、B两个分支间来回切换时特别方便。
恢复工作区文件 git restore <文件> git checkout -- <文件> git restore README.md 放弃工作区对 README.md 的修改。
恢复暂存区文件 git restore --staged <文件> git reset HEAD <文件> git restore --staged README.md 将已 git add 的文件撤出暂存区。
恢复文件到指定版本 git restore --source=<提交> <文件> git checkout <提交> -- <文件> git restore --source=HEAD~2 README.md 将文件恢复到前两次提交时的状态。

💡 迁移建议与注意事项

  1. 版本要求git switchgit restore 需要 Git 2.23 或更高版本 。你可以通过 git --version 命令确认。
  2. 逐步迁移旧的 git checkout 命令仍然完全有效且被支持 。你可以根据自己的节奏,在熟悉的分支操作上先尝试使用 git switch
  3. 处理未提交的更改 :和以前一样,如果切换分支时有未提交的更改可能被覆盖,Git会阻止操作。你可以:
    • 暂存更改git stash -> 切换分支 -> git stash pop
    • 强制切换(慎用)git switch --discard-changes <分支名> 会丢弃更改。
  4. 注意"分离头指针"状态 :无论是用 git checkout <提交号> 还是 git switch --detach <提交号> 直接切换到某个历史提交,都会进入此状态。在此状态下新建的提交易丢失,建议先用 git switch -c <新分支名> 创建一个新分支再操作。

🔍 其他相关更新

  • git sparse-checkout :这是一个更独立的命令,用于配置"稀疏检出",让你只克隆仓库的特定目录,在大仓库中非常有用。它早期功能也整合在 git checkout 中,但现已发展成功能完善的独立命令。

总的来说,git switchgit restore 让 Git 的日常操作变得更清晰和安全。建议你从最常用的分支切换开始尝试 git switch,慢慢就能感受到其直观的好处。

相关推荐
李日灐1 小时前
< 7 > Linux 开发工具:git 版本控制器 和 cgdb/gdb 调试器
linux·运维·服务器·开发语言·git·调试器·gdb/cgdb
Gust of wind1 小时前
idea结合git和Gitee的初步使用
git·gitee·intellij-idea
夜七少eleanor1 小时前
【Git】2026全图文详解安装教程
git
海边的Kurisu1 小时前
从零开始的Git生活 | 刚实习同学的噩梦 And 参与开源不可缺的一环
git·生活
不老刘2 小时前
Git Cherry-Pick:微前端架构下的“精准医疗”与最佳实践
前端·git
爬楼的猪3 小时前
Git Folder Dashboard
git
Uncertainty!!3 小时前
claude code中添加skills自动生成git commit信息
git·git commit·claude code
FserSuN5 小时前
Git Worktree 使用学习
git·学习
Z文的博客5 小时前
嵌入式LINUX QT 开发 .gitignore 文件编写指南
linux·git·qt·elasticsearch·嵌入式
前端双越老师6 小时前
3 个命令 7 个步骤,学会 git worktree 并行开发
git·ai编程·全栈