为什么切换分支的git命令被称为“git checkout”?

23
为什么切换分支的git命令叫做git checkout?这名字真的有意义吗?我认为应该改成git switch。除此之外,git checkout还有其他含义:比如回滚文件(类似于svn revert)。

5
因为 Linus 决定它必须是这样吗? - eckes
5
“git switch”现在已经成为现实!(在Git 2.23中,即2019年8月)。请查看下面我的回答 - VonC
5个回答

16
我看到其他答案正在解释git checkout的作用以及为什么“checkout”可能是描述它的合理方式。然而,虽然我非常喜欢git,但这确实触及了两个严重的挫败点,当我试图帮助人们理解该系统时会出现这些问题:
1. git checkout执行两个非常不同的操作,如果它们是分开的命令,对新手会很有帮助。
2. 愤世嫉俗者可能会认为,git的术语是故意选择的,以混淆从CVS和Subversion来的人!您提到的一个例子(checkout)就是一个很好的例子。另一个例子是commit,在git中完全是本地的,在CVS/SVN中完全依赖于服务器——对于新接触git的人来说,“记录”的darcs术语需要更少的重新学习。我喜欢的另一个例子是你在git中看到的消息“需要更新”,这实际上意味着"需要提交" :)
当然,人们总是可以使用不同的git前端,如easy gitiolaus等,但大多数人最终都要学习标准命令,因此你只需要习惯一些被命名得相当奇怪的命令。
我相信git中这些各种命令的名称有历史原因,但如果选择了不同的单词,那将会很有帮助...

更新: VonC在评论中提供了一个有趣的别名来使git checkout更加安全,适用于两种用法;)


+1000:完全同意。有关结账时的危险,请参阅以下链接:https://dev59.com/E3A85IYBdhLWcg3wD_O8#2961348 - VonC
@VonC:关于这个话题,我认为你可能会对我的新博客文章感兴趣,它涉及到令人困惑的Git术语,并添加了一些更多的例子。 - Mark Longair
谢谢。我稍后会查看:你的网站被归类为“社交网络”,并被工作场所屏蔽了。 - VonC
七年后,不再需要别名:不再需要checkout:git switchgit restore来拯救!(Git 2.23,2019年第三季度) - VonC
我一直以为自己太笨了,无法理解这些概念...旧术语就像是用减号运算符重载加号运算符...还有,在Windows Gui Bash中执行git --version命令并与当前版本进行比较。 - Marcelo Scofano Diniz

8
这是个好名字,因为当你检出一个分支时,就像从图书馆“借阅”书籍一样,你会要求仓库将该分支内的所有适当文件以最新修订状态放到你的工作副本中。
这里实际上不存在"git checkout"有“其他含义”的问题。这个命令可以给你一个单独的文件或多个文件(即“一个分支”)在修订状态X下。无论你是否认为它是“还原”,都不能忽略更重要的一点,即git checkout既灵活又通用。在两种情况下,它都是从仓库中检出了一些状态,并将其设置为你的工作副本,方便编辑。

1
我对“checkout”这个术语的问题在于它暗示你后续需要签入。就像图书馆的比喻——你借了一本书,然后稍后归还。或者其他源代码控制软件,其中“checking out”的意思相同——暂时(可能是独占)访问应该在稍后签出时放弃的文件。 - Erik Hermansen

6

我会将其命名为git switch。

在Git 2.23(2019年8月)中,您不再需要使用令人困惑的git checkout命令。

您可以像您八年前建议的那样,使用git switch代替。

如果您需要更新工作树(而不是切换分支),则新命令git restore负责此任务。

请参阅来自Taylor Blau的“Git 2.23亮点”了解更多信息。


不错的想法,只是好奇为什么人们之前没有想到使用它。 - surajs1n
非常好的观点,谢谢!有关git checkoutgit switch之间的“差异”,请参见此处 - Nate Anderson
1
@TheRedPea 不完全正确:有关 git checkoutgit switch 之间差异的更多信息,请参见此处,以及此处的第二部分。 - VonC

2

由于该命令可用于执行两个操作,因此使用“checkout”关键字“有意义”。

这两个操作是:

  • 将文件上的修改重置为先前的提交ID
  • 切换到分支

当您想要区分提交ID和分支名称时,还可以使用“--”参数。


2

checkout 指的是更新工作树中的文件。 还原也意味着将工作树中的文件更新为其先前提交的版本。 因此,在我的看法中,使用 git checkout 命令来更新或还原更加现实。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接