默认的 Git 分支是什么?

4
这是一个本地的Git概念吗?
我已经研究了一段时间,但似乎无法理解?我只看到Github文档,并且默认分支是master。
如果可能的话,请有人解释一下在本地Git方面这个概念的含义。
编辑:例如,什么设置或想法使一个特定的分支成为默认分支(不一定是初始的分支,而是在进行中的基础上),如何在不使用类似于Github的东西之外更改它?
我的直觉告诉我这与HEAD指向的位置有关(在您克隆并合并回来的存储库中,例如服务器上的裸存储库),从更一般的意义上讲,这是否正确?
感谢!
4个回答

6

这是 Git 的本地概念吗?

不是。这是 GitHub(以及其他托管网站)的概念。它与拉取请求一起使用,而拉取请求也不是 Git 的概念。

当您在 GitHub 上发起拉取请求时,您会推送一个分支;GitHub 默认应该提供哪个分支,用于合并您的拉取请求分支?那就是默认分支。


克隆时,这里一定会有某种重叠。当我克隆它时,它会将我的本地存储库初始化为默认分支。这是因为GitHub将HEAD指向该分支吗? - rubixibuc
1
所以这是我之前提问的一部分 https://dev59.com/k2Ml5IYBdhLWcg3wDzVG。可以说默认分支是 Github 概念和本地 git 概念的重叠吗?如果我在 Github 中设置了默认分支,那么它会将 HEAD 设置为该默认分支,对吗? - rubixibuc
当然,Git有远程HEAD的概念,但它并不特别有趣或重要;它几乎是无意义的。还有一个概念是Git将在克隆结束时创建和检出的“初始分支”,是的,这个概念来自远程HEAD,但同样地,这并不是非常重要的,因为你可以在克隆命令的一部分或克隆后立即更改它;个人而言,我经常喜欢在克隆的过程中不创建和检出任何本地分支。 - matt
当我克隆我的GitHub存储库时,它将在GitHub中检出默认或HEAD引用。我的基本任务是不指定并让Jenkins执行相同的操作。我开始了解什么使某个分支成为默认分支以理解这一点。现在应该单独提出这个问题吗? - rubixibuc
1
@rubixibuc:在git clone期间,Git本身会读取另一侧的HEAD,以确定要在克隆中创建哪个分支,如果您没有使用-b。如果您使用了-b,那当然会覆盖。因此,在某种意义上,您克隆的存储库的HEAD是默认建议的分支名称。对于非常旧的Git服务器,这里还存在一些奇怪的历史陈规,但您不应遇到此类问题。 - torek
这似乎是个X-Y问题?一般来说,询问你想要知道答案的问题而不是其他问题是个好主意。 - matt

5
这是Git的本地概念吗?
自Git 2.28以来,“初始默认分支名称”是一个本机概念。
使用“init.defaultBranch”设置在运行“git init”时将使用的分支名称。
旧的内置默认值为“master”,如果您仍然想使用它,则可能需要显式设置它。否则,每次“git init”时都会在终端上出现黄色的“提示”文本墙。
$ git init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint:   git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint:   git branch -m <name>
Initialized empty Git repository in /home/kristoffer/programming/temp/.git

使用 git var GIT_DEFAULT_BRANCH 命令获取当前配置的默认分支(如果未设置,则为 master[2])。

注释

  1. 这个问题被提出很久以前就已经发布了
  2. git version 2.40.0 版本中测试通过

1
这是一个本地的git概念吗?实际上是的,但本地相关性仅限于`git clone`。Git的“默认分支”背后的算法在此处详细解释:What determines default branch after "git clone?"。而GitHub中切换“默认分支”的实现可能遵循与此类似的模式:Git: Correct way to change Active Branch in a bare repository?How to get default Git branch?。正如您所推测的那样,最终归结为HEAD:What is HEAD in Git?。简而言之,“默认分支”是被克隆仓库的HEAD。

为了使事情更加混乱,git remote set-head (可选)“设置或删除默认分支”,这允许指定远程名称而不是特定分支。 - Brent Bradburn

0

分支不是GitHub的概念,而是源代码存储库的概念。

Git中的默认分支(基础知识)

主分支(现在可选的是main分支)始终是存储库中的默认分支。您可以在分支的副本上工作,以构建独立的功能,而不会破坏或影响生产代码。您还可以从存储库克隆特定的分支。

我发现这篇博客文章对初学者来说非常有趣。

Jenkins中的默认分支

在Jenkins中,您必须设置默认分支,请参见此处

要在工作区中检出的分支。默认值为'master'。请注意,这必须是像'master'或'develop'这样的本地分支名称。不支持远程分支名称,如'origin/master'和'origin/develop'作为分支参数。

您可以为一个或多个特定的分支设置构建,参见this SO post


1
我没有点踩,但可能是因为master并不意味着生产环境。实际上,我更喜欢这样:master是你的开发分支,而生产环境应该明确地称为prod/production,与staging、UAT等相同。你从头开始工作的地方不能是prod/live,它必须是dev。然后随着项目的进展,你可以创建其他分支。 - Andrew
好的,很公平。尽可能包含了有用的信息,不会使原帖或其他读者过载/混淆。在我们公司,我们使用master/main作为生产分支。我们没有dev分支(至少在我的项目中),只有feature分支。 - Christian
1
抱歉,通过设置它来解释它是如何工作的?默认分支是如何设置的,它是如何存在的,这更多是我的问题。我在概念上理解它,但我不理解它在本地git术语中是什么。另外,我也没有给你投反对票。实际上,在git术语中,什么使某个东西成为默认分支,以及如何更改它? - rubixibuc
你想了解类似这样的内容吗?https://dev59.com/rlUK5IYBdhLWcg3wyidl - Christian
好的,你知道的比我最初想象的要多得多。你的问题似乎非常具体。分支只是一个概念。请参见 https://www.perforce.com/blog/vcs/branching-definition-what-branch#:~:text=A%20branch%20is%20a%20copy,baseline%2C%20master%2C%20or%20mainline。关于HEAD:在使用Git时,一次只能检出一个分支 - 这就是所谓的“HEAD”分支。通常,这也被称为“活动”或“当前”分支。但是,HEAD不需要是主分支。你有具体的场景/问题吗?可以添加/共享一个例子吗? - Christian
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接