你有没有想过这样一个问题:为什么 git 使用 checkout 表达分支的切换和创建?check out 代表什么含义?
其实这是一个很好的问题!Git 的 checkout 命令确实让很多人困惑,因为它的名字不太直观。
字面含义与来源
"Check out" 在英语中的常见含义是:
-
从图书馆"借出"图书
-
酒店"退房"
-
商店"结账离开"
在版本控制系统中,这个术语来源于 CVS(Concurrent Versions System) ,Git 的前辈之一。在 CVS 中:
-
checkout= 从仓库获取文件的特定版本到工作目录 -
类似于从图书馆"借出"一本书来阅读和修改
Git 中的 checkout
Git 继承了 CVS 的这个术语,但赋予了更多功能:
1. 检出文件(原始含义)
sh
# 恢复文件到某个版本
git checkout HEAD~2 -- filename.txt
# 放弃工作区的修改
git checkout -- filename.txt
2. 切换分支(扩展含义)
sh
# 切换到已有分支
git checkout develop
3. 创建并切换分支(-b 参数)
sh
# 创建新分支并切换到它
git checkout -b feature/new-feature
为什么让人困惑?
-
一词多义:一个命令做三件不同的事
-
比喻不准确:从仓库"借出"分支或文件?实际是"切换上下文"
-
与日常英语差异:程序员理解 vs 普通人理解不同
Git 2.23+ 的改进
由于 checkout 太容易混淆,Git 2.23(2019年)引入了两个更明确的命令:
sh
# 专门用于切换/创建分支
git switch branch-name
git switch -c new-branch
# 专门用于恢复文件
git restore filename.txt
实际使用建议
-
新项目 :尽量使用
git switch和git restore -
旧项目/兼容性 :
git checkout仍然有效 -
记忆技巧:
-
checkout≈ "检出一个状态"到工作区 -
无论是分支状态还是文件状态
-
所以,git checkout 的命名是历史遗留问题,它的含义已经超越了原始的"借出"概念,变成了一个多功能但容易混淆的命令。新的 switch 和 restore 命令就是为了解决这个问题而引入的。