git checkout <commit-hash>与git checkout分支

Too*_*bal 8 git git-checkout

我在玩git,在这里感到困惑。

HEADdevelop分支是在
235a6d8

当我做:

git checkout 235a6d8
Run Code Online (Sandbox Code Playgroud)

从任何其他分支机构develop分支机构,这使我陷入了孤立的头脑。
我不确定在签出该分支的最新提交时为什么会发生这种情况。

当我做:

git checkout develop
Run Code Online (Sandbox Code Playgroud)

我可以正确切换到开发分支。

git checkout <commit-has>和之间没有区别git checkout branchname
它们有何不同?

Von*_*onC 6

A git checkout <commit-hash><commit>通过在头上分离HEAD(请参见“ DETACHED HEAD”部分),并在工作树中更新索引和文件,准备在上工作。

当a git checkout <branch>进行切换时:它准备进行工作<branch>,通过更新工作树中的索引和文件,并将HEAD指向分支来切换到它。

这很混乱。

马克Longair记载,混乱,“ 为什么是Git命令来切换分支命名为‘ git checkout’?

他还在2012年5月写道:“ 最令人困惑的git术语 ”:

在CVS和Subversion中,“签出”会创建链接到该存储库的源代码的新本地副本。
Git中最接近的命令是“ git clone”。
但是,在git中,“ git checkout”用于完全不同的东西。
实际上,它具有两种截然不同的操作模式:

  • 要在使用git checkout中将HEAD切换为指向新分支或提交<branch>。如果<branch>确实是本地分支,它将切换到该分支(即HEAD将指向引用名称),或者如果它解析为提交将分离HEAD并将其直接指向提交的对象名称。
  • 用特定提交或索引中的内容替换工作副本和索引中的一个或多个文件。
    在用法中可以看到:git checkout -- (update from the index)git checkout <tree-ish> --<tree-ish>通常是一个提交)。

在我理想的世界中,这两种操作方式将具有不同的动词,而且都不是“ checkout

好吧...这就是为什么Git 2.23(2019年第三季度)会将结帐拆分为:

  • git restore 这将更新工作树(可能还会更新索引)
  • git switch 它可以切换分支,或者在需要时分离分支,以便将所有新提交添加到该分支的尖端。


归档时间:

查看次数:

668 次

最近记录:

6 年,10 月 前