关于版本控制:如何将git的”master”分支重命名为”release”?

How do I rename my git 'master' branch to 'release'?

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

我理解我可以通过以下简单的方法在本地重命名主分支:

1
git branch -m master release

然而,这只是局部的。即使我把这个推到遥控器上,头部仍然指向遥控器的主分支。我想彻底摆脱主分支,并在初始克隆时设置默认的本地分支,即释放。

我怎样才能做到这一点?

编辑:似乎源站在Gitorious服务器上,删除主分支时出错。我现在想看看是否可以更改这个,以便默认的分支是"release"。


1
2
3
4
5
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


签出您的主分支

1
git checkout master

创建发布分支并切换到它

1
2
git branch release
git checkout release

把它推到服务器上

1
git push origin release

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

1
git push origin :master

删除本地主分支

1
git branch -d master


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

由于确实不允许从客户机中删除remote master,而且我认为禁止denyDeleteCurrent是有道理的,所以我不想更改该设置。

但是,我发现重命名主iff的最简单方法是直接在远程服务器上运行rename命令。

这对我很有用:

  • 通过ssh登录到远程git服务器
  • 转到项目的xxx.git文件夹
  • 运行:git branch -m master release
  • 现在,远程存储库使用release作为默认分支,任何客户机在该存储库上的任何git clone都将默认签出发布分支。

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


    正如前面其他人所说,这里的问题是有意义的,这不会让您根据默认情况删除头分支。有两种方法可以解决这个问题。一种方法是登录gitorious服务器(使用ssh),在文件服务器上找到git存储库并添加:

    1
    2
    [receive]
            denyDeleteCurrent = warn

    到配置。

    一个更简单的选项就是更改默认分支。转到Gitorious Web界面中的存储库,按"编辑存储库",然后设置"头更改Git存储库中头指向的符号引用"。完成此操作后,可以删除主分支。


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

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

    现在,您想删除其他的吗?

    1
    2
    git branch -d master
    git push origin :master

    简单!