如何在Git中获取主分支的默认值?
简而言之,GitHub建议对默认分支使用如何在Git中获取主分支的默认值?,git,github,branch,Git,Github,Branch,简而言之,GitHub建议对默认分支使用main而不是master 写有弹性的Git别名时,我们如何才能得到这个名字?如何获得Git中“master”分支的默认值 我已经搜索过了,但是中没有一个解决方案能可靠地为我工作 如果我在分支feature,从develop分叉,它将返回我develop,而不是master(或main,其中develop是分叉) 那么,如何获得“主”分支名称呢 注意--问题可能是:git remote show origin为什么不向我显示master,而是develop
main
而不是master
写有弹性的Git别名时,我们如何才能得到这个名字?如何获得Git中“master”分支的默认值
我已经搜索过了,但是中没有一个解决方案能可靠地为我工作
如果我在分支feature
,从develop
分叉,它将返回我develop
,而不是master
(或main
,其中develop
是分叉)
那么,如何获得“主”分支名称呢
注意--问题可能是:git remote show origin
为什么不向我显示master
,而是developer
,因为总分支机构?回答您的问题有两个问题
你提到了main
vsmaster
。现在,这里的第一个问题是,目前实际上没有任何默认分支。有一些,但没有保证查询它的方法,因为“有点”部分是因为在这方面还没有达成共识:不是每个人都安装了Git 2.28或更高版本
也就是说,跑步:
git config --get init.defaultBranch
可能会在您自己的Git存储库中生成一些内容,如果生成了,并且您的Git是2.28或更高版本,那么在运行Git init
时,您的Git将使用它作为未出生分支的默认名称。(另见。)
请注意,如果有人跑步:
git init --initial-branch=xyzzy
要创建新的空存储库,此新的空存储库中未出生的分支的名称将为xyzy
,而不管是否存在init.defaultBranch
设置,也不管其中可能包含什么。--initial branch
选项也首次出现在Git 2.28中
头
您还询问了以下问题的答案:
问题可能是:git remote show origin
为什么不显示我master
,而是显示我developer
,作为总分支
git remote show
命令和git ls remote
命令(try-it)通过调用其他git存储库并从中获取信息来工作。在讨论这些信息之前,让我们来看看<代码>头>代码>如何在您的知识库中工作。
Git存储库的核心是提交的集合。每个提交都用一个唯一的散列ID进行编号。所有Git系统都使用当前的特定算法SHA-1,但有计划切换到SHA-256-以根据提交的内容计算提交的散列ID,这样所有Git系统都会为相同的提交提供相同的散列ID
这就是Git在分发提交方面的工作方式。每个存储库都有自己提交的完整集合。当您交叉连接一对Git存储库时,例如您自己的和Git调用的系统上的一对,它们交换哈希ID。由于散列ID唯一地标识提交,发送方可以列出一个散列ID,接收方可以立即从中判断他是否已提交或需要提交。添加一些基于提交图结构的优化,我们就拥有了have/want协议交换所需的大部分内容
不过,每个Git都使用名称在自己的存储库中查找提交:分支名称、标记名称和其他此类名称。它们带有散列ID,可以找到某些特定的提交。然后,这些提交也会找到任何以前的提交
为了发送提交,Git fetch
配对中的发送Git列出了他的分支和标记以及其他类似的名称,以便接收Git能够确定要请求哪些提交(如果有的话)。您可以使用git为每个ref
列出您自己的名称所有这些名称或某些选定子集。默认设置是列出所有以refs/
开头的名称
上图中缺少一块,那就是特殊的名称HEAD
。这个特殊的名称不是以refs/
开头的,Git在内部以各种特殊的方式使用它,这通常是Git所称的符号ref,我们可以用Git symbolic ref
来阅读它:
$git符号参考头
参考/主管/主管
这告诉我们,在这个特定的Git存储库中,当前的分支是名为master
的分支。(分支名称都以refs/heads/
开头;其他名称以其他基于refs/
的前缀开头。)在非裸Git存储库中,我们通常使用的那种类型意味着有人运行了Git checkout master
或Git switch master
当我们使用gitlsremote
连接到其他一些git时,他们的git将为我们的每个ref运行git,列出他们的名字。但是它们在列表前面加上HEAD
中的值,如果我们添加--symref
选项,1我们可以通过两种方式获得它们的HEAD
:
ref: refs/heads/master HEAD
72c4083ddf91b489b7b7b812df67ee8842177d98 HEAD
71ca53e8125e36efbda17293c50027d31681a41f refs/heads/maint
72c4083ddf91b489b7b7b812df67ee8842177d98 refs/heads/master
a3ce27912f980d787926b113d17f1f532e50162a refs/heads/next
[snip]
这告诉我,他们的Git存储库将master
作为他们的HEAD
。第一条输出线直接说明了这一点;接下来的几行告诉我,它们的头
和参考/头/主
都是指提交72c4083ddf91b489b7b7b812df67ee8842177d98
,这不太直接。2
git remote show
命令可以调用另一个git。3这意味着他们可以让他们列出他们的头是哪个分支。当你看到:
HEAD branch: develop
这仅仅意味着他们的Git将其头
附加到分支名称develope
。如果他们的存储库是非裸的,这意味着他们运行了git checkout develope
或git switch develope
如果它们有一个空的存储库,它们仍然可以得到相同的效果,使用git--worktree=。。。签出
,o
git clone <url>
git clone -b somebranch <url>
git branch | grep -o -m1 "\b\(master\|main\)\b"