从master更改为新的默认分支git

Har*_*rry 4 git github

这是一个场景:

我们有一个默认的分支母版,我们以此为基础进行工作,创建分支并上推等。

现在,我们已经在Master之外创建了一个Develop分支,并将其设置为默认开发分支。

我想知道的是,现在我怎么知道我的git pull命令是否正在通过命令行从默认分支请求更改?或指向这个新的默认分支?

我做了什么:-自从创建新的默认分支git以来,我就从origin / master引入了我的master

另外,任何neww分支都来自Master还是Develop?

如你看到的

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
PS C:\Users\dir\Documents\GitHub\repo> git log
commit 867cxx

fd956f73dc91d0022b (HEAD -> master, origin/master, origin/develop, origin/HEAD)
Run Code Online (Sandbox Code Playgroud)

更新: 默认分支的此更改在克隆存储库后发生。

小智 44

有了git 2.28你可以设置一个全局配置使用该命令 git config --global init.defaultBranch {branchName}

替换{branchName}为默认分支名称,现在每当你创建一个新的 git repo 时,默认分支就是这个。

我的视频中有更多详细信息:https : //www.youtube.com/watch?v=YccHk6QlRss

  • 现在 2.28 已经发布了,这是正确的答案。 (4认同)

fri*_*mle 29

从 GitHub 克隆存储库时,默认分支将存储在HEAD文件中:

$ cat .git/refs/remotes/origin/HEAD
ref: refs/remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

如果在克隆 repo更改了 GitHub 上的默认分支,则不会自动更新,但可以在本地轻松修复:

git remote set-head origin -a
Run Code Online (Sandbox Code Playgroud)

-a 将要 set refs/remotes/<name>/HEAD according to remote

或者显式到一个命名分支:

git remote set-head origin develop
Run Code Online (Sandbox Code Playgroud)

现在,HEAD指向新位置:

$ cat .git/refs/remotes/origin/HEAD
ref: refs/remotes/origin/develop
Run Code Online (Sandbox Code Playgroud)


Oli*_*ans 7

据我所知,git没有“默认分支”的概念。诸如GitHub之类的用户界面确实具有默认分支,即在您打开网页时,默认情况下会看到某个分支(通常是主分支)。但是就git而言,master分支并不特殊,它只是第一个分支的名称。

要创建新分支,请使用-b带有的标志checkout,如下所示:

git checkout -b develop
Run Code Online (Sandbox Code Playgroud)

git branch命令将列出所有现有分支,并*在当前分支旁边列出。您所做的所有提交都会添加到当前分支中。

在您的问题中,您提到从远程拉出。相关概念是“跟踪分支机构”;请参阅https://git-scm.com/book/id/v2/Git-Branching-Remote-Branches上具有该名称的部分。

简而言之,当你做

git pull origin master
Run Code Online (Sandbox Code Playgroud)

它将把更改从存储库的master分支拉origin入当前签出的任何分支。如果愿意,您可以设置远程跟踪,以便git可以根据已签出的分支知道要从何处提取信息。

例如,如果您有一个远程develop-remote分支和一个本地develop-local分支,则可以通过以下方式将本地分支设置为跟踪远程分支:

git checkout develop-local
git branch --set-upstream-to origin/develop-remote
Run Code Online (Sandbox Code Playgroud)

同样,它们可能都被简单地称为develop,为了清楚起见,在这里我将它们区分开。

最后,我要提到的是,当您执行时git pull <url-of-repo>,会自动建立远程跟踪。

PS有关遥控器的更多信息(例如,这origin是什么意思?),请参阅https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes

  • Git 确实有默认分支的概念。这不仅仅是一个用户界面的事情。这是您“git clone”存储库时获得的分支(除非用 [`--branch`](https://git-scm.com/docs/git-clone#Documentation/git-clone.txt- 另行指定) -bltnamegt))。它来自“HEAD”符号引用。 (7认同)
  • 不,这不是真的。当您初始化一个新的存储库时,`git config --global init.defaultBranch main` 会将第一个创建的分支的名称更改为 `main`。[ProGit](https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell) 指出;*Git 中的“master”分支并不是一个特殊的分支。它与任何其他分支完全相同。几乎每个存储库都有一个存储库的唯一原因是 git init 命令默认创建它,并且大多数人都懒得去更改它。* (4认同)
  • 正如您有本地分支“refs/heads/foo”、本地存储库中的远程跟踪分支“refs/remotes/origin/foo”以及远程存储库中的分支“refs/heads/foo”一样,您也有一个本地“HEAD”(是的,指的是当前签出的分支),本地存储库中的远程跟踪“refs/remotes/origin/HEAD”,以及远程存储库中的“HEAD”。本地`HEAD`和`refs/remotes/origin/HEAD`是从`git clone`上的远程`HEAD`初始化的;本地“refs/remotes/origin/HEAD”是从“git remote set-head -a”上的远程“HEAD”更新的。 (2认同)