基于本文回答
0
评论

讲讲Git 中引入的 git switch 和 git restore命令

知识点图片

在 Git 2.23 版本(2019年发布)中,Git 官方引入了两个非常重要的新命令:git switchgit restore

引入这两个命令的根本原因是:以前的 git checkout 承担了太多的职责,导致概念混淆。

在过去,git checkout 既可以用来切换分支(操作分支),又可以用来撤销文件修改(操作文件)。这对于初学者来说非常难以理解。因此,Git 社区决定将 git checkout 的功能一分为二,让命令的语义更加清晰:

  • git switch:专门用于切换分支
  • git restore:专门用于还原/撤销文件

下面为你详细拆解这两个命令的用法,并与老版的 git checkout 进行对比。


一、 git switch:专门用于切换分支

顾名思义,switch 就是“切换”。它只负责改变当前的 HEAD 指针(即切换分支),不会去修改或重置你的工作区文件内容(除非是因为切换分支导致的正常文件变动)。

常见用法及对比:

1. 切换到一个已存在的分支

  • 新命令: git switch main
  • 老命令: git checkout main

2. 创建并切换到一个新分支

  • 新命令: git switch -c feature-A-c 代表 create,比以前的 -b 更直观)
  • 老命令: git checkout -b feature-A

3. 切换回上一个分支

  • 新命令: git switch -
  • 老命令: git checkout -

4. 以“游离 HEAD” (Detached HEAD) 状态切换到某个特定的 Commit
如果你想查看历史中的某个节点,但不想建分支:

  • 新命令: git switch --detach 3a4b5c6 (强制要求加上 --detach,防止用户误操作导致游离状态)
  • 老命令: git checkout 3a4b5c6 (以前 Git 会直接进入游离状态,常常让新手不知所措)

二、 git restore:专门用于还原文件修改

restore 的意思是“恢复、还原”。它专门用来处理文件级别的撤销操作,无论是工作区(Working Directory)中尚未提交的修改,还是暂存区(Staging Area)中准备提交的内容,都可以用它来处理。

常见用法及对比:

1. 丢弃工作区中文件的修改(尚未 git add
如果你修改了一个文件,但不想要这些修改了,想让它恢复到和当前仓库里一样的状态:

  • 新命令: git restore index.html
  • 老命令: git checkout -- index.html

2. 将文件从暂存区移出(已经 git add,但不想提交了)
也就是所谓的“取消暂存(Unstage)”,把文件从暂存区放回工作区,但保留文件内容的修改

  • 新命令: git restore --staged index.html
  • 老命令: git reset HEAD index.html (以前用 reset 撤销暂存极其反直觉)

3. 同时撤销工作区和暂存区的修改
既取消暂存,又把文件内容恢复到原始状态:

  • 新命令: git restore --staged --worktree index.html
  • 老命令: git checkout HEAD index.html

4. 从另一个分支或特定的 Commit 中恢复某个文件
如果你把某个文件改坏了,想直接把 main 分支上的那个文件“拿”过来覆盖当前文件:

  • 新命令: git restore --source=main index.html
  • 老命令: git checkout main -- index.html

三、 总结与建议

用一张表来总结它们的职责划分:

你的目的 以前的命令 (容易混淆) 现在的推荐命令 (语义清晰)
切换分支 git checkout <branch> git switch <branch>
创建并切换分支 git checkout -b <branch> git switch -c <branch>
撤销工作区文件修改 git checkout -- <file> git restore <file>
取消暂存区文件 (Unstage) git reset HEAD <file> git restore --staged <file>

新手/老手建议:

  1. git checkout 并没有被废弃,为了向下兼容,它仍然可以完全正常使用。你的旧脚本不需要修改。
  2. 但对于日常的手动操作,强烈建议养成使用 switchrestore 的习惯。这两个命令的英文语义极其精准,不仅能减少误操作,也能减轻你大脑的记忆负担。看到 switch 就知道在动分支,看到 restore 就知道在改文件。
右滑查看面试常问