如何将Git的“ master”分支重命名为“ release”?


115

我们想对我们的项目执行一项新政策,即将master分支现在称为release分支,以确保更清楚地了解如何使用该分支。当然,我们还将开发和发布候选分支。

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

git branch -m master release

但是,这仅在本地。即使我将其向上推到远程,HEAD仍然指向远程主分支。我想完全摆脱master分支,并在初始克隆时发布默认的本地分支,然后发布。

我该如何实现?

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


2
嘿,足够公平了。长期价值足够高,至少可以尝试。
凯尔·海斯


一些(远程)服务器拒绝删除“默认”分支(Github就是这种情况)。因此,您可能需要在服务器上为操作时间选择另一个“默认”分支...在Github上,这可以在“分支”视图中完成。
jehon

Answers:


139
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上的存储库中,转到设置分支默认分支。将其更改为释放,然后执行其余步骤。


3
当我尝试git push --delete时,出现以下错误:禁止删除当前分支
Kyle Hayes

8
您使用的是github或类似的东西,您需要将默认分支设置为其他东西:matthew-brett.github.com/pydagogue/gh_delete_master.html或仅将master保留在此处而忽略它。
亚当·迪米特鲁克

是的,我们有一个惊人的例子。让我看看是否可以选择。
凯尔·海斯

看起来像是令人毛骨悚然的提交钩子,禁止删除master分支-完全没有理由,我看不到:/
fge 2012年

1
! [remote rejected] branch (deletion of the current branch prohibited) Bitbucket也会发生同样的情况。切换“主库”中设置屏幕(齿轮图标下)。
dnfehren

13

签出您的主分支

git checkout master

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

git branch release
git checkout release

将其推送到服务器

git push origin release

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

git push origin :master

删除本地主分支

git branch -d master

2
通过这些步骤,我可以确定遇到与上述相同的错误。
凯尔·海斯

@KyleHayes这是服务器的配置问题。尽管默认情况下是这种方式,但是更改的过程对于用户应该是显而易见的,或者在Stackoverflow上很容易发现
Jeff Ferland

您必须先切换到另一个分支,然后才能删除一个分支。
martinedwards

5

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

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

但是,我发现,如果您可以通过命令行访问远程服务器最简单的重命名主服务器的方法就是直接在远程服务器上运行重命名命令。

这对我有用:

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

现在,远程存储库将使用release其默认分支,并且默认情况下git clone,来自任何客户端的该存储库中的任何分支都将签出release分支。

在设置一个裸仓库来配置它以满足您的需求之后,这也非常有帮助。


3

正如其他人先前所说,这里的问题是Gitorious,它不允许您默认删除HEAD分支。您有两种选择可以解决此问题。一种方法是登录Gitorious服务器(使用ssh),在文件服务器上找到Git存储库并添加:

[receive]
        denyDeleteCurrent = warn

配置。

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


2

如果您在GitHub上遇到此问题,请执行逐步操作,直到删除远程分支为止。它不会让你那样做。然后登录到Web界面,并在存储库上转到设置分支默认分支。将其更改为新分支,然后执行其余步骤。


1

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

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

现在,您要删除其他吗?

git branch -d master
git push origin :master

简单!


当我到达git push origin:master命令时,我遇到了与在@Adam注释中发布的错误相同的错误。
凯尔·海斯

0

由于已经完成了重命名分支的操作​​,因此将HEAD设置release为remote

git remote set-head origin release

然后要删除master远程分支,您必须是管理员,至少在GitHub上。请参阅此帖子以获取更多信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.