当前位置: 首页 > news >正文

Git 2.23 版本引入的 switch 和 checkout 命令有什么区别

如果你用的是 Git 2.23 及以上版本,切换分支时优先用git switch,恢复文件时用git restore;旧版本或需要兼容脚本时继续用git checkout

先说结论:git switch是 Git 官方为分支切换专门设计的命令,语义更清晰、操作更安全,但需要 Git 2.23+ 版本支持。

  • 适合:Git 2.23 及以上版本,日常分支切换场景
  • 重点看:命令职责分离(switch 管分支、restore 管文件)、未提交更改保护机制
  • 别忽略:旧版本兼容性问题、checkout -bcheckout -B的行为差异

命令速用版

下面是常用场景的命令对照,可以直接复制使用:

# 切换到已有分支
git switch dev              # 推荐
git checkout dev            # 兼容旧版本# 创建并切换新分支
git switch -c feature/login              # 推荐
git checkout -b feature/login            # 兼容旧版本# 从远程分支创建本地跟踪分支
git switch -c release-1.2 `--track` origin/release-1.2
git checkout -b release-1.2 origin/release-1.2# 恢复文件(switch 不支持,用 restore 或 checkout)
git restore `--source` HEAD -- file.txt
git checkout HEAD -- file.txt

为什么会这样

Git 在 2.23 版本之前,git checkout承担了太多职责:既能切换分支,又能恢复文件。这种设计带来两个问题:

第一,命令意图不清晰。看到git checkout xxx,你无法一眼判断是要切换分支还是恢复文件,得看xxx是分支名还是文件名。

第二,误操作风险高。比如你想恢复某个文件的修改,却漏写了--参数,Git 可能尝试切换到同名分支;或者在有未提交更改时切换分支,checkout会尝试合并更改,失败才报错,而switch会直接阻止切换。

官方引入git switchgit restore,就是把这两件事拆开:switch 专管分支切换,restore 专管文件恢复。命令职责单一,出错概率自然降低。

分步处理

第一步:确认 Git 版本

git `--version`

如果版本低于 2.23,git switch命令不可用,继续使用git checkout即可。如果版本满足要求,可以开始迁移到新命令。

第二步:切换已有分支

git switch main

执行前建议先运行git status检查工作区状态。如果有未提交的更改,git switch会直接报错提醒你处理,不会像checkout那样尝试合并。

第三步:创建并切换新分支

git switch -c feature/new-feature

这等价于先运行git branch feature/new-feature再运行git switch feature/new-feature。如果要基于远程分支创建,加上`--track`参数即可。

第四步:恢复文件修改

git restore `--source` HEAD -- file.txt

注意git switch不支持文件恢复,这个场景需要用git restore或继续用git checkout

怎么验证是否生效

执行完分支切换后,用以下命令确认当前所在分支:

git branch `--show-current`

或者查看完整分支列表,当前分支前会有星号标记:

git branch

如果是从远程分支创建的跟踪分支,可以用git status查看上游分支信息,确认跟踪关系是否建立成功。

常见坑

坑一:在旧版本或脚本中默认使用 switch

git switch是 2.23 版本才引入的,如果你的团队有人还在用旧版本,或者 CI/CD 脚本运行在旧环境中,直接写git switch会报错。这种场景建议继续用git checkout,或者在脚本开头检查版本。

坑二:误以为 checkout -b 会重置已存在分支

git checkout -b existing-branch如果分支已存在,会直接报错,不会执行重置。若要强制重置需使用git checkout -B existing-branch,这会导致该分支指向当前 HEAD,历史提交可能丢失。git switch在不带-c参数时遇到已存在分支也会报错,避免了误用强制重置参数的风险,更安全。

坑三:在 detached HEAD 状态下提交后忘记建分支

git switch `--detach` abc1234切换到某次提交浏览时,如果在这个状态下做了提交,没有及时用git switch -c new-branch创建分支指向它,这些提交可能在 Git 垃圾回收后被清理。临时浏览没问题,要保留就得立刻建分支。

坑四:忘记 switch 不支持文件恢复

习惯了git checkout的人可能会尝试git switch HEAD -- file.txt,这会报错。文件恢复场景请改用git restore或继续用git checkout

参考来源

  • Git Official Documentation - git-scm.com
  • Git 2.23.0 Release Notes

原文链接:https://www.zjcp.cc/ask/11130.html

http://www.jsqmd.com/news/819944/

相关文章:

  • 西门子S7-300/400:巧用UDT数组优化FC/FB多设备控制逻辑
  • 【DeepSeek大模型Azure部署黄金方案】:20年架构师亲授5大避坑指南与性能调优实战
  • ansari-skill:提升数据分析效率的Python工具包实战解析
  • 如何选择适合自己的UPS电源?三步搞定选型难题
  • Harmonix:AWS开源音乐AI基准工具集,解决数据与评估标准化难题
  • VLP-16激光雷达的‘双回波’模式详解:在自动驾驶与林业测绘中如何获取更丰富的环境信息
  • Flutter for OpenHarmony 在线考试与自测系统APP技术文章
  • 2026缠绕机厂家推荐:包装自动化设备选型指南,真空包装机封切收缩包装机优质厂商对比 - 栗子测评
  • 百度网盘秒传技术:3分钟掌握永久分享大文件的终极方案
  • 中兴B860AV3.1-M2_S905L3安卓9.0线刷实战:从零到一解锁电视盒子全功能
  • 告别龟速下载!用清华镜像源5分钟搞定PyQt5、PyQt5-tools和PyQt5Designer的Pycharm安装
  • 告别裸机思维:用LwIP的tcpip_init给你的物联网设备一个真正的网络‘大脑’
  • TypingSVG:为GitHub主页创建动态打字效果SVG横幅
  • 如何让AI看懂歪斜的图片?从传统CV到深度学习,实战破解旋转验证码
  • Flutter for OpenHarmony 编程技能树APP技术文章
  • 独立开发者如何借助 Taotoken 以更低成本试验多种 AI 模型
  • 从SRTM到ALOS:详解全球主流高精度DEM数据获取与实战应用
  • 多智能体系统编排:基于拓扑思想的AI协作框架设计与实践
  • 产品经理和运营必看:如何用方差分析(ANOVA)科学评估A/B测试效果?
  • ARMv8.1调试架构核心原理与工程实践
  • Flutter for OpenHarmony 外语单词背诵与听力训练APP
  • 2026年评价高的定制冷弯机设备/冷弯机/檩条冷弯机/山东异形型材冷弯机厂家精选合集 - 行业平台推荐
  • ARM架构LR寄存器:函数调用与异常处理的底层机制解析
  • 【紧急预警】ElevenLabs v3.2 API重大变更影响视频导出链路!48小时内必须升级的3个兼容性补丁
  • Bitnami Charts:云原生应用部署的标准化与生产就绪实践
  • UPS 电源怎么选?教你轻松选对适合自己的不间断电源
  • 2026年热门的涂装钣金下料加工/规模化涂装加工/涂装底盘装甲加工/涂装折弯加工批量采购厂家推荐 - 行业平台推荐
  • 长期使用Taotoken聚合API在业务系统中的稳定性体验总结
  • 企业级Helm Charts仓库架构与CI/CD实践深度解析
  • 工业以太网硬件加速技术解析与应用