我在玩git,在这里感到困惑。
该HEAD的develop
分支是在
235a6d8
当我做:
git checkout 235a6d8
从任何其他分支机构或develop
分支机构,这使我陷入了孤立的头脑。
我不确定在签出该分支的最新提交时为什么会发生这种情况。
当我做:
git checkout develop
我可以正确切换到开发分支。
我git checkout
和之间没有区别git checkout branchname
。
它们有何不同?
A git checkout
,
通过在头上分离HEAD(请参见“ DETACHED HEAD”部分),并在工作树中更新索引和文件,准备在上工作。
当a git checkout
进行切换时:它准备进行工作
,通过更新工作树中的索引和文件,并将HEAD指向分支来切换到它。
这很混乱。
马克Longair记载,混乱,“ 为什么是Git命令来切换分支命名为‘ git checkout
’? ”
他还在2012年5月写道:“ 最令人困惑的git术语 ”:
在CVS和Subversion中,“签出”会创建链接到该存储库的源代码的新本地副本。
Git中最接近的命令是“git clone
”。
但是,在git中,“git checkout
”用于完全不同的东西。
实际上,它具有两种截然不同的操作模式:
要在使用git checkout中将HEAD切换为指向新分支或提交
。如果
确实是本地分支,它将切换到该分支(即HEAD将指向引用名称),或者如果它解析为提交将分离HEAD并将其直接指向提交的对象名称。
用特定提交或索引中的内容替换工作副本和索引中的一个或多个文件。
在用法中可以看到:git checkout -- (update from the index)
和git checkout
(-- 通常是一个提交)。
在我理想的世界中,这两种操作方式将具有不同的动词,而且都不是“
checkout
”。
好吧...这就是为什么Git 2.23(2019年第三季度)会将结帐拆分为:
git restore
这将更新工作树(可能还会更新索引)
git switch
它可以切换分支,或者在需要时分离分支,以便将所有新提交添加到该分支的尖端。