【问题标题】:How do I rename my Git 'master' branch to 'release'?如何将我的 Git 'master' 分支重命名为 'release'?
【发布时间】:2012-02-04 11:07:53
【问题描述】:

我们希望为我们的项目实施一项新政策,即现在将主分支称为发布分支,以确保更清楚地了解应该如何使用该分支。当然,我们也会开发和发布候选分支。

我知道我可以通过简单地使用以下命令在本地重命名 master 分支:

git branch -m master release

但是,这只是局部的。即使我将它推送到远程,HEAD 仍然指向远程主分支。我想完全摆脱主分支,并在初始克隆时创建默认本地分支,发布。

我怎样才能做到这一点?

似乎由于源位于Gitorious 服务器上,因此删除主分支时出错。我现在正在尝试查看是否可以更改此设置,以便默认分支为“发布”。

【问题讨论】:

标签: git version-control branch git-branch


【解决方案1】:
git checkout -b release master    # Create and switch to the release branch
git push -u origin release        # Push the release branch to the remote and track it
git branch -d master              # Delete local master
git push --delete origin master   # Delete remote master
git remote prune origin           # Delete the remote tracking branch

请注意,如果您使用的是 GitHub,则需要在第 3 步之后首先更改 GitHub 上的“默认”分支:

在 github.com 上的存储库中转到 SettingsBranchesDefault Branch。将其更改为 release,然后执行其余步骤。

【讨论】:

  • 当我尝试 git push --delete 时,出现以下错误:禁止删除当前分支
  • 您使用的是 github 或类似的东西,您需要将默认分支设为其他内容:matthew-brett.github.com/pydagogue/gh_delete_master.html 或将 master 留在那里并忽略它。
  • 是的,我们有一个 gitorious 实例。让我看看这是否是一种选择。
  • 看起来 gitorious 的提交钩子禁止删除主分支——我看不出有什么好的理由:/
  • 相同的! [remote rejected] branch (deletion of the current branch prohibited) 将发生在 Bitbucket 上。在设置屏幕(齿轮图标下)切换“主存储库”。
【解决方案2】:

检查你的主分支

git checkout master

创建你的发布分支并切换到它:

git branch release
git checkout release

推送到服务器

git push origin release

删除服务器上的master分支引用

git push origin :master

删除本地master分支

git branch -d master

【讨论】:

  • 我可以通过这些步骤告诉我会遇到与上面提到的相同的错误。
  • @KyleHayes 这是服务器的配置问题。尽管默认情况下是这种方式,但更改的过程应该对用户或easily discoverable on Stackoverflow 是显而易见的
  • 你必须切换到另一个分支才能删除一个分支。
【解决方案3】:

注意:此答案适用于您具有命令行访问权限的自托管 Git 服务器。

由于确实不允许尝试从客户端删除 remote master,而且我认为禁止 denyDeleteCurrent 是有道理的,因此我不想更改该设置。

但是,我发现重命名您的主服务器的最简单方法如果您有远程服务器的命令行访问权限,则直接在远程服务器上运行重命名命令。

这对我有用:

  1. 通过 SSH 登录到远程 git 服务器
  2. 转到项目的 xxx.git 文件夹
  3. 运行:git branch -m master release

现在远程存储库使用release 作为其默认分支,并且任何客户端在该存储库上的任何git clone 都将默认签出发布分支。

在设置一个裸存储库以根据您的需要对其进行配置之后,它也非常有用。

【讨论】:

    【解决方案4】:

    正如其他人之前所说,这里的问题是 Gitorious,它不允许您默认删除 HEAD 分支。你有两个选择来解决这个问题。一种是登录Gitorious服务器(带ssh),在文件服务器上找到Git仓库,添加:

    [receive]
            denyDeleteCurrent = warn
    

    到配置。

    一个更简单的选择是更改默认分支。在 Gitorious Web 界面中转到您的存储库,按“编辑存储库”,并设置“Head 将 Git 存储库中的 HEAD 指向的符号引用更改为:”。完成此操作后,您可以删除 master 分支。

    【讨论】:

      【解决方案5】:

      如果您在使用 GitHub 时遇到此问题,请执行上述步骤,直到删除远程分支。它不会让你这样做。然后登录到 Web 界面并在存储库上转到 SettingsBranchesDefault Branch。将其更改为新分支并执行其余步骤。

      【讨论】:

        【解决方案6】:

        理想情况下,您想设置跟踪,请执行以下操作:

        git push origin HEAD:release
        git checkout --track origin/release
        

        现在,您要删除其他人吗?

        git branch -d master
        git push origin :master
        

        简单!

        【讨论】:

        • 当我使用 git push origin :master 命令时,我遇到了与@Adam 的评论中发布的错误相同的错误。
        【解决方案7】:

        从 Git 2.28(2020 年 7 月 27 日发布)开始,您现在可以配置在初始化新存储库时创建的分支的名称:

        $ git config --global init.defaultBranch main
        

        设置此变量后,运行 git init 会生成一个初始分支为 main 的仓库:

        $ git init
        

        在 /home/thomas/test-git-repo/.git/ 中初始化空的 Git 存储库 $ 混帐状态 在主分支上

        还没有提交

        无需提交(创建/复制文件并使用“git add”进行跟踪) 发行说明:https://lore.kernel.org/git/xmqq5za8hpir.fsf@gitster.c.googlers.com/

        ccKiley

        【讨论】:

          【解决方案8】:

          既然您已经完成了对分支的重命名,请将 HEAD 设置为 release 以进行远程

          git remote set-head origin release
          

          然后要在远程删除master 分支,您必须是管理员,至少在 GitHub 上。更多信息请参考this post

          【讨论】:

            猜你喜欢
            • 2011-05-20
            • 2016-09-12
            • 1970-01-01
            • 2022-07-26
            • 2011-02-15
            • 2021-06-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多