Renomeando uma ramificação no GitHub

297

Acabei de renomear minha filial local usando

git branch -m oldname newname

mas isso renomeia apenas a versão local da ramificação. Como posso renomear o arquivo no GitHub?

encantar
fonte
5
possível duplicata de git: filial remota renomeação
Andrew Marshall
Você verificou as configurações de administrador? Meu projeto atual no github não tem ramificações, mas você pode renomear o repositório lá, então eu acho que você poderia renomear ramificações também.
precisa saber é o seguinte
12
@evanmcdonnal Não, você não pode renomear uma ramificação Git no site GitHub.
Andrew Marshall
As respostas para esta pergunta são quase universalmente erradas. A questão não é como renomear um ramo git, é como renomear um ramo github . Muitas coisas no github estão ligadas a um ramo, o que significa que qualquer resposta precisa cobrir essas coisas. Por exemplo, renomeando master para main
gman 14/06
@ gman Pelo que vale, parece que essas respostas responderam ao espírito da pergunta do OP. A pergunta do OP pode não ter sido perfeitamente formulada, do ponto de vista tecnicamente exigente ou do problema relevante que você está investigando. Mas, então, essa pergunta não vem de uma profunda experiência técnica do git ou do GitHub. Nesta perspectiva, pode-se considerar isso uma questão "iniciante" ou elementar. Como tal, é redigido e respondido adequadamente a este público. Frustrante, claro, mas acho que esse Q, essas respostas são apropriadas / relevantes, especialmente para os Q's pré-BLM git / Hub.
SherylHohman

Respostas:

309

Como mencionado, exclua o antigo no Github e pressione novamente, embora os comandos usados ​​sejam um pouco mais detalhados do que o necessário:

git push origin :name_of_the_old_branch_on_github
git push origin new_name_of_the_branch_that_is_local

Simples. Dissecando um pouco os comandos, o comando git push é essencialmente:

git push <remote> <local_branch>:<remote_branch>

Portanto, fazer um push sem local_branch especificado significa essencialmente "não tira nada do meu repositório local e faz dele o ramo remoto". Eu sempre achei que isso fosse completamente desleixado, mas é assim que é feito.

Edit: A partir do Git 1.7, há uma sintaxe alternativa para excluir uma ramificação remota:

git push origin --delete name_of_the_remote_branch

Edit: Como mencionado por @ void.pointer nos comentários

Observe que você pode combinar as duas operações push:

git push origin :old_branch new_branch

Isso excluirá o ramo antigo e enviará o novo.

Isso pode ser transformado em um alias simples que leva o ramo remoto original e o novo nome do ramo como argumentos, em ~/.gitconfig:

[alias]
    branchm = "!git branch -m $2 $3 && git push $1 :$2 $3 -u #"

Uso:

git branchm origin old_branch new_branch

Observe que os argumentos posicionais nos comandos do shell eram problemáticos nas versões mais antigas (anteriores a 2,8?) Do git, portanto o alias pode variar de acordo com a versão do git. Veja esta discussão para detalhes.

Adam Parkin
fonte
32
Note que você pode combinar as operações de pressão 2: git push origin :old_branch new_branch. Isso excluirá o ramo antigo e enviará o novo.
precisa saber é o seguinte
4
Existe alguma razão para o novo ramo não poder ser enviado antes de excluir o antigo? Pessoalmente, prefiro processos em que a operação de exclusão ocorre após a operação de criação ser bem-sucedida, caso algo dê errado.
jmort253
7
Não funciona. Ele simplesmente colocará o ramo de volta no Github com seu nome antigo.
geoff
1
@AdamParkin 1. git branch -m new_branch(renomeie old_branch para new_branch) 2. git commit -m 'msg', 3. git push4. Mhmm, old_branch aparece no Github, pergunta do Google e sou levado à sua resposta 5. git push origin :old_branch(diz que foi excluído) 6. git push origin new_branch... termina e diz * [new branch] new_branch -> old_branch. Volte ao Github e old_branchapareça novamente. Se eu excluir na interface da web do Github, tenho a opção de "Restaurar", então parece que pressionar o new_branch está apenas restaurando.
Kcvin
2
Uma coisa a ter em atenção é que, quando você renomeia a ramificação, todas as solicitações pull que você abrir contra essa solicitação serão automaticamente fechadas. Tivemos que mudar o nome da volta ramo e, em seguida, reabrir manualmente todas as solicitações de pull ....
jmort253
24

Os seguintes comandos funcionaram para mim:

git push origin :old-name-of-branch-on-github
git branch -m old-name-of-branch-on-github new-name-for-branch-you-want
git push origin new-name-for-branch-you-want
Taimoor Changaiz
fonte
Esta é a breve resposta que funciona. BTW, o primeiro comando também pode ser colocado como último na resposta.
Eric Wang
esta resposta abrange git não github
gman 14/06
1
Na verdade, eu fiz isso duas vezes e funcionou no github.
spozun 16/06
17

Eu encontrei 3 comando como você pode alterar o nome do seu ramo git, e esses comandos são uma maneira mais rápida 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

Se você precisar passo a passo, pode ler este ótimo artigo

Como renomear ramificações locais e remotas do Git

Hazarapet Tunanyan
fonte
1
git push --set-upstreamé a parte mais importante se você alterar o nome da filial localmente usando o aplicativo github antes de excluir a filial remota.
Louis Yang
esta resposta abrange git não github
gman 14/06
12

Basta remover o ramo antigo e criar um novo.

Exemplo (renomeando apenas a ramificação remota):

git push origin :refs/heads/oldname
git push origin newname:refs/heads/newname

Você provavelmente também deve renomear a filial local e alterar as configurações para onde pressionar / puxar.

Vi.
fonte
1
O segundo comando não deveria ser git push origin newname:refs/heads/newname? master e newname podem não apontar para o mesmo commit.
9113 Steve Folly
"master" é apenas um exemplo, mudará agora.
Vi.
Talvez a ordem dos dois comandos deva ser revertida (ou seja, faça o upload do novo nome primeiro, remova o antigo depois disso)
Vi.
esta resposta abrange git não github
gman 14/06
@ gman, não renomeá-lo como Git também o renomeia com Github?
Vi.
9

Renomear ramificações no git local e remoto

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.

Mude para o ramo e, em seguida:

git push origin -u new-name

Então a conclusão é

git branch -m new-name
git push origin :old-name new-name
git push origin -u new-name
Abdelrahman Mohamed
fonte
esta resposta abrange git não github
gman 14/06
Isso é para o git e o GitHub está sob o git, portanto ele funcionará e funcionará comigo e com outras pessoas
Abdelrahman Mohamed
Isso não funciona. Tente o primeiro e o segundo passo git branch -m new-name && git push origin :master new-name. Isso irá falhar. Se esta resposta é apenas sobre git e não github, essa pergunta é uma duplicata de várias outras perguntas e deve ser encerrada. Se realmente é sobre o github, a resposta deve abranger o github. Esta resposta não.
gman 15/06
2

Aqui está o que funcionou para mim:

1.) Crie o novo ramo primeiro: git push github newname: refs / heads / newname

2.) No site github, vá para configurações e mude a ramificação Padrão para newname

3.) Exclua o nome antigo git push github --delete oldname

Wiley
fonte
0
  1. Baixar Atlassian SourceTree (gratuito).
  2. Importe seu clone local do repositório.
  3. Clique com o botão direito do mouse no seu ramo para renomear, na barra lateral. Selecione "Renomear ramificação ..." no menu de contexto e renomeie-o.
  4. Empurre para a origem.
Engenheiro
fonte
Obrigado, mas tive que mudar para o ramo, bem como importá-lo.
Flash Sheridan
1
esta resposta cobre git não github
gman 14/06
0

Este artigo mostra como fazê-lo muito fácil.
1. Para renomear uma ramificação Git local, podemos usar o comando Git branch -m para modificar o nome:
git branch -m feature1 feature2
2. Se você está apenas procurando pelo comando para renomear uma ramificação Git remota, é isso "
git push -u origin feature2:feature3
Verifique se você não possui tags na ramificação antes de fazer isso git tag.

Daniel Kobe
fonte
esta resposta abrange git não github
gman 14/06
0

Outra maneira é renomear os seguintes arquivos :

  1. navegue no diretório do projeto
  2. renomear .git/refs/head/[branch-name]para.git/refs/head/new-branch-name
  3. renomeie .git/refs/remotes/[all-remote-names]/[branch-name]para.git/refs/remotes/[all-remote-names]/new-branch-name

Renomeie o cabeçote e remotes no PC local e nas origens / servidores remotos

A ramificação agora é renomeada (local e remota!)


Atenção

Se seu nome de filial atual contiver slashes ( /), o git criará os diretórios da seguinte forma:

nome do ramo atual: "awe/some/branch"

  • .git/refs/head/awe/some/branch
  • .git/refs/remotes/[all-remote-names]/awe/some/branch

deseja nome da filial: "new-branch-name"

  1. navegue no diretório do projeto
  2. copie o brancharquivo de.git/refs/*/awe/some/
  3. colocá-lo em .git/refs/head/.
  4. copie o brancharquivo de todos.git/refs/remotes/*/awe/some/
  5. colocá-los em .git/refs/remotes/*/.
  6. renomeie todos os brancharquivos opied para new-branch-name.
  7. verifique se a estrutura de diretório e arquivo agora se parece com isso:
    • .git/refs/head/new-branch-name
    • .git/refs/remotes/[all-remote-names]/new-branch-name
  8. faça o mesmo em todas as suas origens / servidores remotos (se existir)
    • info : nos servidores remotos geralmente não há diretórios refs / remotes / * porque você já está no servidor remoto;) (bem, talvez em configurações avançadas do git seja possível, mas nunca vi isso)

A ramificação agora é renomeada de awe/some/branchpara new-branch-name(local e remota!)

Os diretórios no nome da filial foram removidos.


Informações: dessa forma, pode não ser a melhor, mas ainda funciona para pessoas que podem ter problemas com as outras maneiras.

Iyashi
fonte
esta resposta cobre git não github
gman 14/06
0

No meu caso, eu precisava de um comando adicional para fazer com que minha ramificação renomeada subisse para
git branch --unset-upstream
origin newname .

(Para facilitar a digitação), eu primeiro git checkout oldname.
Em seguida, execute o seguinte:

git branch -m newname
git push origin :oldname ou ougit push origin --delete oldname
git branch --unset-upstream
git push -u origin newname git push origin newname

Essa etapa extra pode ser necessária apenas porque eu (tendem a) configurar o rastreamento remoto em minhas filiais via . Dessa forma, ao fazer check-out, subseqüentemente preciso apenas digitar em vez degit push -u origin oldnameoldnamegit pushgit push origin oldname

Se eu NÃO usar o comando git branch --unset-upstreamantes git push origin newbranch, o git recria oldbranch e empurra newbranchpara origin oldbranch- derrotando minha intenção.

SherylHohman
fonte
esta resposta abrange git não github
gman 14/06
@gman Ponto tomado. Minha solução usa o git localmente para renomear uma ramificação no GitHub, remotamente, depois de renomeá-la na cópia git local do repositório do GitHub. Portanto, talvez isso possa ser considerado uma solução especializada, pois quando você deseja usar a linha de comando, e não a interface do site do GitHub, e você tem um clone local que também deseja atualizar. Obrigado por destacar essa distinção e por esclarecer que essa resposta é para um caso especial, e não para uma solução geral.
SherylHohman 14/06
O problema é que o github vincula os recursos às ramificações. Tente renomear master para main e suas instruções falharão.
gman
-1

Os seguintes comandos renomeiam a ramificação localmente, exclua a ramificação antiga no local remoto e empurre a nova ramificação, configurando a ramificação local para rastrear o novo controle remoto:

git branch -m old_branch new_branch
git push origin :old_branch
git push --set-upstream origin new_branch
Pooja Mane
fonte
Embora seu snippet de código possa resolver o problema, você deve descrever qual é o objetivo do seu código (como ele resolve o problema). Além disso, convém verificar stackoverflow.com/help/how-to-answer
Ahmad F
esta resposta cobre git não github
gman 14/06
-1

Simples assim . Para renomear o git branch local e remotamente, use este snippet (testado e funciona como um encanto):

git branch -m <oldBranchName> <newBranchName>
git push origin :<oldBranchName>
git push --set-upstream origin <newBranchName>

Explicação:

  1. Renomear etapa:

    Referência do Git: Com a opção -m ou -M , será renomeado para. Se tiver um reflog correspondente, ele será renomeado para corresponder e uma entrada de reflog será criada para lembrar a renomeação da ramificação. Se existir, -M deve ser usado para forçar a renomeação.

  2. Excluir etapa:

    Referência do Git: git push origin: experimental Encontre uma referência que corresponda à experimental no repositório de origem (por exemplo, refs / heads / experimental) e exclua-a.

  3. Atualização na etapa de repo remoto (referência upstream para rastreamento):

    Referência do Git: --set-upstream Para cada ramificação atualizada ou enviada com êxito, adicione uma referência upstream (rastreamento), usada pelo git-pull [1] sem argumento e outros comandos. Para mais informações, consulte branch..merge em git-config [1].

avivamg
fonte
esta resposta cobre git não github
gman 14/06
-1

3 etapas simples

  • cabeça de origem git push

  • git branch -m nome-ramo antigo nome-ramo novo

  • cabeça de origem git push

Martin Mungai
fonte
esta resposta cobre git não github
gman 14/06
-1

Na ramificação git, execute a ramificação git -m old_name new_name Isso modificará o nome da ramificação em seu repositório local git push origin: old_name new_name Isso fará o nome modificado for remoto e excluirá a ramificação antiga git push origin -u new_name Define a ramificação local filial remota. Isso resolve o problema

Papa Francisco
fonte
esta resposta abrange git não github
gman