Como renomear uma ramificação local do Git?

Respostas:

13737

Se você deseja renomear um ramo enquanto aponta para qualquer ramo, faça:

git branch -m <oldname> <newname>

Se você deseja renomear a ramificação atual, pode:

git branch -m <newname>

Uma maneira de lembrar isso é -mpor "mover" (ou mv), que é como você renomeia os arquivos. Adicionar um alias também pode ajudar. Para fazer isso, execute o seguinte:

git config --global alias.rename 'branch -m'

Se você estiver no Windows ou em outro sistema de arquivos que não diferencia maiúsculas de minúsculas e houver apenas alterações de maiúsculas no nome, precisará usar -M, caso contrário, o git lançará um erro de ramo já existente :

git branch -M <newname>
siride
fonte
87
O que eu realmente queria saber era se isso irá necessariamente afetar a filial remota quando / se você empurrar
PandaWood
181
@ PandaWood: ele adiciona o novo ramo quando você pressiona, mas não exclui o ramo antigo. Se você usar git push -f --mirror, ele renomeará a ramificação no controle remoto, mas você só deve usar esse método se o controle remoto for apenas uma cópia do seu repositório atual. Veja também esta pergunta: stackoverflow.com/questions/1526794/git-rename-remote-branch
siride
19
@PandaWood, depende de como push.defaultestá configurado. Por padrão ( matching), ele envia para um controle remoto cujo nome corresponde. Você precisaria fazer git push origin <newname>:<oldname>ou criará uma nova ramificação remota. No entanto, se push.defaultestiver definido como upstream, você poderá push origin heade as coisas irão para o nome antigo no controle remoto.
quer
13
@ NightOwl888: o -m provavelmente é a abreviação de "move", seguindo a convenção do Unix de usar o mvnome para renomear arquivos. A razão para isso é que mover e renomear, em um sistema de arquivos inode baseado em diretório, é totalmente equivalente.
siride
51
O nome longo da -mopção é --move, por exemplo, git branch --move masterrenomeia o ramo atual para ser chamado de "mestre".
precisa saber é o seguinte
445
git branch -m old_branch_name new_branch_name

O comando acima alterará o nome do seu ramo, mas você deve ter muito cuidado ao usar o ramo renomeado, porque ainda fará referência ao ramo upstream antigo associado a ele, se houver.

Se você deseja inserir algumas alterações no master depois que sua ramificação local for renomeada para new_branch_name (nome do exemplo):

git push origin new_branch_name:master (agora as alterações vão para a filial principal, mas o nome da sua filial local é new_branch_name)

Para mais detalhes, consulte " Como renomear o nome da sua filial local no Git ".

Madhan Ayyasamy
fonte
326

Para renomear sua ramificação atual:

git branch -m <newname>
Jonathan
fonte
159
Você precisará usar -M para renomear se estiver alterando apenas a capitalização, pois o git dirá que a ramificação já existe.
Cjspurgeon
289

Aqui estão as etapas para renomear a ramificação:

  1. Alterne para o ramo que precisa ser renomeado
  2. git branch -m <new_name>
  3. git push origin :<old_name>
  4. git push origin <new_name>:refs/heads/<new_name>

EDIT (12/01/2017): certifique-se de executar o comando git statuse verifique se o ramo recém-criado está apontando para sua própria referência e não para a mais antiga. Se você encontrar a referência para a ramificação mais antiga, precisará desabilitar o upstream usando:

git branch --unset-upstream
Milind Anantwar
fonte
1
Em qual etapa seria desabilitada a montante? Antes da etapa 4?
Cyclonecode
1
Esta é a melhor resposta aqui, pois descreve o processo completo para concluir uma renomeação corretamente
Chris Halcrow
212

Renomear a ramificação será útil assim que ela terminar. Então, novas coisas estão chegando e você deseja desenvolver no mesmo ramo em vez de excluí-lo e criar o novo.

Pela minha experiência, para renomear uma filial local e remota no Git, você deve executar as seguintes etapas.

Citando em vários estados - renomeie uma filial local e remota no git

1. Renomeie sua filial local

Se você estiver no ramo que deseja renomear:

git branch -m new-name

Se você estiver em um ramo diferente:

git branch -m old-name new-name

2. Exclua a ramificação remota com nome antigo e pressione a ramificação local com novo nome

git push origin :old-name new-name

3. Redefina a ramificação upstream para a ramificação local com novo nome

git push origin -u new-name
trungk18
fonte
1
Este funcionou melhor para mim. Aqui os 2 passos deram os seguintes erros:error: dst ref refs/heads/<old-name> receives from more than one src.; error: failed to push some refs to 'git@uri:foo/bar.git'
Anto 23/02
1
Você tem o problema ao executar o comando, git push origin :old-name new-namecerto?
Trungk18
Yep exatamente (desculpe eu quis dizer "2º passo", não "2 passos" - cansado)
Anto
116

As respostas até agora estão corretas, mas aqui estão algumas informações adicionais:

É possível renomear com segurança uma ramificação com '-m' (mover), mas é preciso ter cuidado com '-M', porque ela força a renomeação, mesmo que já exista uma ramificação com o mesmo nome. Aqui está o trecho da página do manual 'git-branch':

Com a opção -m ou -M, <oldbranch>será renomeado para <newbranch>. Se <oldbranch>tiver um reflog correspondente, ele será renomeado para corresponder <newbranch>e uma entrada de reflog será criada para lembrar a renomeação da ramificação. Se <newbranch>existir, -M deve ser usado para forçar a renomeação.

Vanchev
fonte
2
O que acontece com o ramo substituído?
Kevin Dice
Ele é substituído pelo novo nome / ramificação. Por exemplo, se você tiver as seguintes ramificações no git: master b1 <- ramificação atual b2 depois de fazer 'git branch -M b2', você terá apenas: master b2 <- a ramificação atual b1 desaparecerá e se desejar recuperá-lo, você deve verificar pelo seu hash. Você pode vê-lo digitando 'git reflog'. Felicidades.
Vanchev
O -Msinalizador também é útil para forçar uma renomeação se você estiver apenas corrigindo o caso do nome do ramo, por exemplo, alterando myBranchpara MyBranch. (Com -m, retornos git fatal: A branch named 'MyBranch' already exists.)
Jon Schneider
92

1. Renomeie

Se é o seu ramo atual, basta fazer

git branch -m new_name

Se for outro ramo que você deseja renomear

git branch -m old_name new_name

2. Acompanhe uma nova ramificação remota

- Se sua ramificação foi enviada por push, depois de renomear, você precisa excluí-la do repositório Git remoto e pedir ao seu novo local para rastrear uma nova ramificação remota:

git push origin :old_name
git push --set-upstream origin new_name
Oss
fonte
74

Nomeadamente, nomeei um ramo começando com um hífen e depois fiz check-out do mestre. Eu não queria excluir meu ramo, tinha trabalho nele.

Nenhum deles funcionou:

git checkout -dumb-name

git checkout -- -dumb-name

"s, 's e \s não quer ajudar. git branch -mnão funciona

Aqui está como eu finalmente consertei. Vá para o arquivo .git / refs / heads da sua cópia de trabalho, encontre o nome do arquivo "-dumb-name" e obtenha o hash do ramo. Então isso fará o check-out, criará um novo ramo com um nome sensato e excluirá o antigo.

git checkout {hash}
git checkout -b brilliant-name
git branch -d -- -dumb-name
Samuel Meacham
fonte
8
Você não poderia simplesmente renomear o arquivo em refs / heads?
android.weasel
Idem. Se você precisar cavar a estrutura de diretórios para fazer essa mágica, vá até o final e faça um 'mv - -dumb-name bright-name' Faça um 'git branch -av' e você verá uma estrutura de diretórios de .git / refs. Ou talvez 'grep -R ^ .git / refs' para ver os hashes diretamente.
Dave X
2
Você provavelmente poderia ter usadoreflog
Código Whisperer
Honestamente, se esse é o caminho que você deseja seguir, eu evitaria o (IMO confuso e potencialmente perigoso, se você não sabe o que está fazendo) percorrendo o diretório .git em primeiro lugar, e apenas o faça com alguns comandos normais com alguma análise "git log" (usando sinalizadores apropriados para mostrar ramificações e para descobrir de qual shasum você deseja fazer check-out de uma nova ramificação) e, em seguida, faça-o. Em seguida, remova a ramificação denominada como insegura. Eu desprezo que o git insista que você precisa entender todo o seu funcionamento interno para fazer algumas coisas, mas aprecio muito que você possa fazer essas coisas.
Jon V
É mais difícil criar um ramo com um nome ruim no 2.10.1+. Se você fizer isso de alguma forma, poderá usar o git branch -v para obter a versão curta de hash dos seus branches (adicione -r para remote). Você pode usar o git rev-parse <shorthash> para obter o hash completo, se necessário.
House of Dexter
67

Para renomear uma ramificação localmente:

git branch -m [old-branch] [new-branch]

Agora você também terá que propagar essas alterações no servidor remoto.

Para enviar alterações da ramificação antiga excluída:

git push origin :[old-branch]

Para enviar alterações de criação de nova ramificação:

git push origin [new-branch]
aliasav
fonte
57

Apenas três etapas para replicar a alteração no nome remotee no GitHub:

Passo 1 git branch -m old_branchname new_branchname

Passo 2 git push origin :old_branchname new_branchname

etapa 3 git push --set-upstream origin new_branchname

Harry_pb
fonte
2
Eu tinha também para fazer uma coisa addtional: git push --set-upstream origin new_branchnameque é mencionado na resposta @Nomade
IbrahimShendy
2
Etapa 3 não necessária. Tudo estava atualizado após o Passo 2.
Dev
@Dev nem em todos os casos Dev, eu tive que atualizar recentemente, pois usando bitbucket e codecommit, a etapa 3 é necessária
Harry_pb
40

Renomeie a ramificação usando este comando:

git branch -m [old_branch_name] [new_branch_name]

-m: Renomeia / move o ramo. Se já houver um ramo, você receberá um erro.

Se já existe um ramo e você deseja renomear com esse ramo, use:

 git rename -M [old_branch_name] [new_branch_name]

Para mais informações sobre ajuda, use este comando no terminal:

git branch --help

ou

man git branch
Hafiz Shehbaz Ali
fonte
40

Usuários avançados do Git podem renomear manualmente usando:

Rename the old branch under .git/refs/heads to the new name

Rename the old branch under .git/logs/refs/heads to the new name

Update the .git/HEAD to point to yout new branch name
Jethik
fonte
34
  1. Renomeie sua filial local.

Se você estiver no ramo que deseja renomear:

git branch -m new-name

Se você estiver em um ramo diferente:

git branch -m old-name new-name
  1. Exclua a ramificação remota com nome antigo e pressione a ramificação local com novo nome.

git push origin :old-name new-name

  1. Redefina a ramificação upstream para a ramificação local com novo nome. Mude para o ramo e, em seguida:

git push origin -u new-name

Ou, para uma maneira rápida de fazer isso, você pode usar estas 3 etapas:

# Renomear filial localmente

git branch -m old_branch new_branch  

# Exclua a ramificação remota antiga

git push origin :old_branch  

# Empurre a nova ramificação, defina a ramificação local para rastrear o novo controle remoto

git push --set-upstream origin new_branch   

Referência: https://www.w3docs.com/snippets/git/how-to-rename-git-local-and-remote-branches.html

badarshahzad
fonte
isso funciona para mim
Vazgen Manukyan 18/01
26

Aqui estão três etapas: Um comando que você pode chamar dentro do seu terminal e alterar o nome da filial.

git branch -m old_branch new_branch         # Rename branch locally
git push origin :old_branch                 # Delete the old branch
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

Se você precisar de mais: passo a passo, Como alterar o nome da filial do Git é um bom artigo sobre isso.

Hazarapet Tunanyan
fonte
25

Provavelmente, como mencionado por outros, isso será uma incompatibilidade de caso na nomeação de ramificações.

Se você tiver uma situação dessas, suponho que você esteja no Windows, o que também o levará a:

$ git branch -m CaseSensitive casesensitive
fatal: A branch named 'casesensitive' already exists.

Então você tem que fazer uma etapa intermediária:

$ git branch -m temporary
$ git branch -m casesensitive

Nada mais.

P4C
fonte
1
Observe que essa situação também pode surgir em um Mac, o que também é (excepcionalmente irritante) insensitivo a maiúsculas e minúsculas em seu sistema de arquivos.
Jon V
Como alternativa, você pode usar, em -Mvez de -mfazer esse tipo de "correção de caso", renomear em uma única etapa.
21418 Jon Schneider
23

Tentando responder especificamente à pergunta (pelo menos o título).

Você também pode renomear a filial local , mas continua acompanhando o nome antigo no controle remoto.

git branch -m old_branch new_branch
git push --set-upstream origin new_branch:old_branch

Agora, quando você executa git push, a old_branchreferência remota é atualizada com o seu local new_branch.

Você precisa conhecer e lembrar dessa configuração. Mas pode ser útil se você não tiver a opção de escolher o nome da filial remota, mas não gostar (oh, quero dizer, você tem uma boa razão para não gostar!) E prefere uma opção mais clara nome para sua filial local.

Jogando com a configuração de busca, você pode até renomear a referência remota local. ou seja, ter um refs/remote/origin/new_branchponteiro ref para o ramo, que é de fato o old_branchativado origin. No entanto, eu desencorajo isso, para a segurança de sua mente.

Pierre-Olivier Vares
fonte
22

Alterar a filial localmente é bastante fácil ...

Se você estiver no ramo para o qual deseja alterar o nome, faça o seguinte:

git branch -m my_new_branch

Caso contrário, se você estiver em masterou qualquer outro ramo que não seja o que você deseja alterar o nome, basta:

git branch -m my_old_branch my_new_branch

Além disso, eu crio a imagem abaixo para mostrar isso em ação em uma linha de comando . Nesse caso, você está na masterramificação, por exemplo:

Alterar localmente o nome da filial

Alireza
fonte
21

Se você estiver disposto a usar o SourceTree (que eu recomendo fortemente), clique com o botão direito do mouse no seu ramo e escolha 'Renomear'.

insira a descrição da imagem aqui

Marcin Szymczak
fonte
20

Para renomear a ramificação atual (exceto o estado HEAD desanexado), você também pode usar este alias:

[alias]
    mvh = !sh -c 'git branch -m `git rev-parse --abbrev-ref HEAD` $1'
dentuzhik
fonte
18

Outra opção é não usar a linha de comando. Clientes GUI do Git, como o SourceTree, retiram grande parte da dor / curva de aprendizado sintático que faz com que perguntas como essa estejam entre as mais vistas no Stack Overflow.

No SourceTree, clique com o botão direito do mouse em qualquer ramificação local no painel "Ramificações" à esquerda e selecione "Renomear ...".

Steve Chambers
fonte
5
Eu não chamaria isso de dor. O comando git é muito fácil de usar, uma vez que você tenha visto essa resposta, provavelmente nunca mais voltará. O problema é mais do que, ao que parece, a documentação da linha de comando git não é intuitiva o suficiente.
Nearoo 8/03
1
É verdade, mas com o SourceTree, quase nunca preciso me preocupar em verificar a documentação. Tudo é geralmente intuitivo - basta clicar com o botão direito e ver quais são as opções. (BTW eu não sou afiliado com eles de qualquer maneira - assim como a ferramenta!)
Steve Chambers
17

Uma maneira simples de fazer isso:

git branch -m old_branch new_branch         # Rename branch locally
git push origin :old_branch                 # Delete the old branch
git push --set-upstream origin new_branch   # Push the new branch, set local branch to track the new remote

Para mais, veja isto .

Nomade
fonte
15

Como você não deseja enviar a ramificação para um servidor remoto, este exemplo será útil:

Digamos que você tenha um ramo existente chamado "my-hot-feature" e queira renomeá-lo para "feature-15".

Primeiro, você deseja alterar sua filial local. Isso não poderia ser mais fácil:

git branch -m my-hot-feature feature-15

Para obter mais informações, você pode visitar Renomeando local e remotamente uma filial no Git .

Tanah
fonte
13

Git versão 2.9.2

Se você deseja alterar o nome da filial local em que está:

git branch -m new_name

Se você deseja alterar o nome de uma ramificação diferente:

git branch -m old_name new_name

Se você deseja alterar o nome de uma ramificação diferente para um nome que já existe:

git branch -M old_name new_name_that_already_exists

Nota: O último comando é destrutivo e renomeará sua ramificação, mas você perderá a ramificação antiga com esse nome e essas confirmações, porque os nomes das ramificações devem ser exclusivos.

nikkypx
fonte
11

Se você deseja alterar o nome da ramificação atual, execute:

git branch -m [old_branch] [new_branch]

Se você deseja excluir a ramificação remota antiga, execute:

git push origin :[old_branch]

Se você deseja excluir a ramificação remota antiga e criar uma nova ramificação remota, execute:

git push origin :old_branch new_branch
Arif
fonte
6

A renomeação do ramo Git pode ser feita usando:

  1. git branch -m oldBranch newBranch

  2. git branch -M oldBranch ExistingBranch

A diferença entre -m e -M :

-m: se você estiver tentando renomear sua filial com um nome de filial existente usando -m . Irá gerar um erro dizendo que o ramo já existe. Você precisa dar um nome único.

Mas,

-M: isso ajudará você a forçar a renomeação com um nome, mesmo que exista. Portanto, um ramo existente substituirá inteiramente por ele ...

Aqui está um exemplo de terminal Git,

mohideen@dev:~/project/myapp/sunithamakeup$ git branch
  master
  master0
  new_master
  test
* test1
mohideen@dev:~/project/myapp/sunithamakeup$ git branch -m test1 test
fatal: A branch named 'test' already exists.
mohideen@dev:~/project/myapp/sunithamakeup$ git branch -M test1 test
mohideen@dev:~/project/myapp/sunithamakeup$ git branch
  master
  master0
  new_master
* test
mohideen@dev:~/project/myapp/sunithamakeup$
Mohideen bin Mohammed
fonte
5

Para usuários da GUI do Git, não poderia ser muito mais simples. Na GUI do Git, escolha o nome da ramificação na lista suspensa na caixa de diálogo "Renomear ramificação" criada no item de menu Ramificação: renomear, digite um novo nome e clique em "Renomear". Eu destaquei onde encontrar a lista suspensa.

Renomeie uma ramificação local do Git

Ivan
fonte
3

Se você quiser:

  • Renomeie o repositório Git, execute: git branch -m <oldname> <newname>
  • Exclua a ramificação antiga: git push origin: old-name new-name
  • Confirme usando: git commit <newname>
    • e empurre usando: git push origin new_branch_name:master
  • Se você deseja verificar o status, use: git status
  • Se você quiser conferir, use: git checkout
Vineet Jain
fonte
3

Todas as respostas anteriores estão falando git branch -m. Claro, é fácil de operar, mas, para mim, pode ser um pouco difícil lembrar de outro comando do Git. Então, eu tentei fazer o trabalho pelo comando que eu conhecia. Sim, você pode adivinhar.

Eu uso git branch -b <new_branch_name>. E se você não quiser salvar o ramo antigo agora, execute-o git branch -D <old_branch_name>para removê-lo.

Sei que pode ser um pouco tedioso, mas é mais fácil entender e lembrar. Espero que seja útil para você.

Dai Kaixian
fonte
Se você estiver com problemas para lembrar de comandos, poderá configurar aliases de shell ou git para si mesmo.
sean
e se eu precisar executar o comando em tantas máquinas diferentes?
Dai Kaixian
1

No PhpStorm:

VCS → Git → Ramos ... → Ramos locais → _seu_branch_ → Renomear

AlexSi
fonte
0

Tudo que você precisa fazer são as três etapas:

  1. Atribua o novo ramo sob .git / refs / heads o novo nome
  2. Dê ao ramo antigo em .git / logs / refs / heads o novo nome
  3. Atualize o .git / HEAD para levar ao seu novo nome de filial

fonte