Git中的所有分支是否相同或者主人不同?我并不是指我们在层次结构中给出的逻辑位置。我的意思是,是否有一些基础代码处理主分支与处理功能分支的方式不同?
答案 0 :(得分:5)
git源代码中有master
的一些相对较小的特殊情况。克隆git源并运行git grep master
以查看所有这些(请注意,许多只是发行说明)。以下是一些示例:
builtin/fast-export.c: * We also leave "master" as a special case, since it do
builtin/fast-export.c: if (!strcmp(refname, "refs/heads/master"))
快速导出中的这些位用于匿名化名称(请参阅the manual);分支master
不会被匿名化。
builtin/fmt-merge-msg.c: if (!strcmp("master", current_branch))
这是默认的合并消息:"将分支X合并到Y&#34 ;; "进入Y"当Y为master
时,部分被省略。
答案 1 :(得分:4)
分支是一个分支,无论它具有哪个名称。唯一的区别是当你谈到远程跟踪分支时。
“起源”并不特别 就像分支名称“master”在Git中没有任何特殊含义一样,“origin”也没有。虽然“master”是运行git init时启动分支的默认名称,这是它被广泛使用的唯一原因,但“origin”是运行git clone时远程的默认名称。如果你改为运行git clone -o booyah,那么你将把booyah / master作为你的默认远程分支。
远程跟踪分支只是对远程存储库中存在的分支的本地引用。您无法直接控制它 - 只要您进行网络操作,它就会自动更新。
从文档中引用相关部分:
远程跟踪分支是对远程分支状态的引用。它们是你无法移动的本地参考;每当您进行任何网络通信时,它们都会自动移动。远程跟踪分支充当书签,以提醒您最后一次连接远程存储库中的分支的位置。
当前分支(您正在处理的分支)称为HEAD,它只是一个特殊的指针(引用)文件。这意味着当您执行git checkout <branch>
时,它会更新以指向通知的分支。
答案 2 :(得分:2)
头部分支很特别。这就是repository / .git / HEAD指向的东西,当你克隆存储库时,它被用作默认的分支。除此之外,所有分支都是平等的。