为什么切换分支的git命令名为
git checkout
?我会把它命名为
git switch
。此外,git checkout
还有其他含义:例如恢复文件(如 svn revert
)
我看到大多数其他答案都在解释
git checkout
的作用以及为什么“结账”可能是描述它的合理方式。 然而,虽然我非常喜欢 git,但这确实触及了当我试图帮助人们理解该系统时出现的两个严重的挫败点:
git checkout
做了两件截然不同的事情,如果它们是单独的命令,这对新手会很有帮助。愤世嫉俗的人可能会认为 git 的术语是故意选择的,目的是为了迷惑来自 CVS 和 Subversion 的人! 你提到的那个(
checkout
)就是一个很好的例子。 另一个是 commit
,它在 git 中完全是本地的,并且完全依赖于 CVS / SVN 中的服务器——darcs 术语“记录”对于刚接触 git 的人来说不需要太多的学习。 我喜欢的另一个例子是您在 git 中看到的消息“需要更新”,这实际上意味着 “需要提交” :)当然,人们总是可以使用不同的 git 前端,例如 easy git、iolaus 等,但大多数人最终都必须学习标准命令,所以你只需要习惯其中一些的命名相当令人惊讶。
我确信 git 中这些不同命令的名称有历史原因,但如果选择不同的单词将会很有帮助......
更新:VonC在评论中链接到带有简洁别名的答案,以使
git checkout
在其两种用法中更安全;)
这是一个很好的名字,因为在签出分支时,您要求存储库为您提供(就像从图书馆“签出”书籍一样)该分支内最新修订状态的所有适当文件作为您的工作副本。
这里并不存在
git checkout
具有“其他含义”的问题。 该命令为您提供处于 修订状态 X 的单个文件或一组文件(读作:“分支”)。 无论您是否考虑“恢复”,都忽略了更重要的一点,那就是 git checkout
很灵活,而且有点通用。 在这两种情况下,都是从存储库中检出一定量的状态并将其设置为工作副本,准备进行编辑。
我会将其命名为 git switch。
使用 Git 2.23(2019 年 8 月),您不必再使用令人困惑的
git checkout
命令。
git switch
代替,就像您八年前建议的那样。
如果您需要更新工作树(不切换分支),则由 new 命令
git restore
负责。
请参阅 Taylor Blau 的“Git 2.23 的亮点”了解更多信息。
因为该命令可用于执行两个操作,所以使用“checkout”关键字“有意义”。
这两个动作是:
当您想要区分提交 ID 和分支名称时,还可以使用“--”参数
checkout
指的是更新工作树中的文件。
恢复还意味着将工作树中的文件更新为之前的提交。
因此,在我看来,使用 git checkout
使用一个命令来更新或恢复更为现实。
Git 开发团队得出了与您相同的结论:
checkout
做多项事情会令人困惑。 为了解决这个问题,在 2019 年的 Git 2.23.0 版本中,该命令被分为两个不同的实验命令:
switch
— 切换到指定分支restore
— 从另一个分支或源恢复文件添加了 switch
命令的
commit的提交消息得出与您类似的结论:
“git checkout”做太多事情是许多人感到困惑的根源 用户(有时甚至会咬老用户)。为了解决这个问题, 命令将分为两个新命令:switch 和 Restore。好的 旧的“git checkout”命令仍然在这里,直到所有(或大多数) 用户)厌倦了它。
请注意(截至 2024 年 9 月)新命令仍被列为实验性命令(
switch
、restore
):
此命令是实验性的。行为可能会改变。