Git中的所有分支都是平等的还是主人不同的?我并不是指我们在层次结构中给出的逻辑位置.我的意思是,是否有一些基础代码处理主分支与处理功能分支的方式不同?
master在git源代码中有一堆相对较小的特殊情况.克隆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"))
Run Code Online (Sandbox Code Playgroud)
快速导出中的这些位用于匿名化名称(参见手册); branch master不会被匿名化.
builtin/fmt-merge-msg.c: if (!strcmp("master", current_branch))
Run Code Online (Sandbox Code Playgroud)
这是默认的合并消息:"将分支X合并到Y"; 当Y为时,省略"into Y"部分master.
分支机构是分支机构,无论其名称如何。唯一的区别是当您谈论远程跟踪分支时。
引用官方文件:
“起源”不是特殊的,就像分支名称“ master”在Git中没有任何特殊含义一样,“起源”也没有。当运行git init时,“ master”是启动分支的默认名称,这是它被广泛使用的唯一原因,而当您运行git clone时,“ origin”是远程的默认名称。如果改为运行git clone -o booyah,则将booyah / master作为默认远程分支。
该远程跟踪分支仅仅是一个局部引用存在于远程存储库的一个分支。您无法直接控制它-进行网络操作时,它会自动为您更新。
引用文档中的相关部分:
远程跟踪分支是对远程分支状态的引用。它们是您无法移动的本地参考;每当您进行任何网络通信时,它们都会自动为您移动。远程跟踪分支充当书签,以提醒您远程存储库中分支是您最后一次连接到分支的位置。
当前分支(您正在处理的分支)被称为HEAD,这只是一个特殊的指针(引用)文件。这意味着当您执行操作时,git checkout <branch>它会更新为指向通知分支。