Como faço para renomear meu branch 'master' do Git para 'release'?


115

Gostaríamos de impor uma nova política para nossos projetos de que o branch master agora seja chamado de branch de lançamento para garantir que seja mais claro como o branch deve ser usado. Naturalmente, também teremos desenvolver e lançar branches candidatos.

Eu entendo que posso renomear o branch master localmente simplesmente usando o seguinte:

git branch -m master release

No entanto, isso ocorre apenas localmente. Mesmo se eu empurrar isso para o remoto, o HEAD ainda aponta para o branch master remoto. Eu quero me livrar do branch master completamente e tornar o branch local padrão no clone inicial, ser liberado.

Como posso conseguir isso?

Parece que, como a origem está em um servidor Gitorious , recebo erros ao excluir o branch master. Estou tentando ver agora se é possível mudar isso para que o branch padrão seja 'release'.


2
Heh, é justo. O valor a longo prazo é alto o suficiente para pelo menos tentar.
Kyle Hayes


Alguns servidores (remotos) se recusam a deletar o branch "padrão" (é o caso do Github). Então talvez você precise ir ao servidor para escolher outro branch "padrão" para o horário das operações ... No Github, isso pode ser feito na visualização "branch".
jehon

1
git branchagora suporta um --movesinalizador git-scm.com/docs/git-branch#Documentation/git-branch.txt---move
alxndr

Respostas:


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

Observe que, se estiver usando o GitHub, você precisará primeiro alterar seu branch "padrão" no GitHub após a etapa 3:

Em seu repositório em github.com, vá em ConfiguraçõesRamificaçõesRamificação padrão . Altere-o para liberar e execute o restante das etapas.


3
Quando tento git push --delete, recebo o seguinte erro: exclusão do branch atual proibida
Kyle Hayes

8
Você está usando o github ou algo semelhante, você precisa transformar o branch padrão em outra coisa: matthew-brett.github.com/pydagogue/gh_delete_master.html ou apenas deixar o master lá e ignorá-lo.
Adam Dymitruk

Sim, temos uma instância histórica. Deixe-me ver se isso é uma opção.
Kyle Hayes

Parece que gitorious 'commit hooks proíbe a exclusão do branch master - por nenhuma boa razão que eu possa ver: /
fge

1
O mesmo ! [remote rejected] branch (deletion of the current branch prohibited) acontecerá com o Bitbucket. Mude o "Repositório principal" na tela de configurações (sob o ícone de engrenagem).
dnfehren

13

Confira seu ramo mestre

git checkout master

Crie seu branch de lançamento e mude para ele:

git branch release
git checkout release

Envie isso para o servidor

git push origin release

Exclua a referência do branch master no servidor

git push origin :master

Exclua o branch master local

git branch -d master

2
Posso dizer por essas etapas que vou encontrar o mesmo erro que mencionei acima.
Kyle Hayes

@KyleHayes Esse é um problema de configuração do servidor. Embora seja assim por padrão, o processo para alterar isso deve ser aparente para o usuário ou facilmente detectável no Stackoverflow
Jeff Ferland

Você tem que mudar para outro ramo antes de excluir um ramo.
martinedwards de

5

Observação: essa resposta é destinada a servidores Git auto-hospedados nos quais você tem acesso à linha de comando.

Como tentar excluir o remote masterde um cliente de fato não é permitido e presumo que proibir denyDeleteCurrentfaça sentido, não gostaria de alterar essa configuração.

No entanto, descobri que a maneira mais fácil de renomear seu master se você tiver acesso à linha de comando para o servidor remoto é executar o comando rename diretamente no remoto.

Isso funcionou para mim:

  1. Faça login via SSH no servidor git remoto
  2. Vá para a pasta xxx.git do seu projeto
  3. corre: git branch -m master release

Agora, o repositório remoto usa releasecomo seu branch padrão e qualquer um git clonenesse repositório de qualquer cliente fará o check-out do branch de lançamento por padrão.

É muito útil também após configurar um repositório vazio para configurá-lo de acordo com suas necessidades.


3

Como afirmado anteriormente por outros, o problema aqui é Gitorious, que não permite que você exclua o branch HEAD por padrão. Você tem duas opções para contornar esse problema. Uma é fazer login no servidor Gitorious (com ssh), encontrar o repositório Git no servidor de arquivos e adicionar:

[receive]
        denyDeleteCurrent = warn

para a configuração.

Uma opção mais fácil é apenas alterar o branch padrão. Vá para o seu repositório na interface da web do Gitorious, pressione "Editar repositório" e defina "Cabeçalho Alterar o ref simbólico, o cabeçalho no repositório Git aponta para:". Depois de fazer isso, você pode excluir o branch master.


2

Se você tiver esse problema com o GitHub , siga as etapas até excluir o branch no remoto. Não vai deixar você fazer isso. Em seguida, efetue login na interface da Web e, no repositório, vá em ConfiguraçõesRamificaçõesRamificação padrão . Mude para a nova ramificação e execute o resto das etapas.


1

Idealmente, você deseja configurar o rastreamento, então faça o seguinte:

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

Agora, você quer deletar os outros?

git branch -d master
git push origin :master

Simples!


Recebi o mesmo erro que postei no comentário de @Adam quando cheguei ao comando git push origin: master.
Kyle Hayes

0

Uma vez que você terminou de renomear os ramos, definir o HEAD releasepara remoto

git remote set-head origin release

Então, para deletar o masterbranch no remoto, você teria que ser o administrador, pelo menos no GitHub. Por favor, consulte esta postagem para mais informações.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.