Renombrar una sucursal en GitHub

297

Acabo de renombrar mi sucursal local usando

git branch -m oldname newname

pero esto solo cambia el nombre de la versión local de la rama. ¿Cómo puedo cambiar el nombre del de GitHub?

encantar
fuente
55
posible duplicado de git: renombrar rama remota
Andrew Marshall
¿Has verificado la configuración de administrador? Mi proyecto actual en github no tiene ramas, pero puede cambiar el nombre del repositorio allí, así que creo que también podría cambiar el nombre de las ramas.
evanmcdonnal
12
@evanmcdonnal No, no puede cambiar el nombre de una sucursal de Git desde el sitio de GitHub.
Andrew Marshall
Las respuestas a esta pregunta son casi universalmente incorrectas. La pregunta no es cómo cambiar el nombre de una rama git, es cómo cambiar el nombre de una rama github . Muchas cosas en github están vinculadas a una rama, lo que significa que cualquier respuesta debe cubrir esas cosas. Por ejemplo, cambiar el nombre de master a main
gman
@gman Por lo que vale, parece que estas respuestas respondieron al espíritu de la pregunta del OP. Es posible que la pregunta del OP no se haya redactado perfectamente, desde un punto de vista técnicamente exigente, o el problema relevante que está investigando actualmente. Pero entonces, esta pregunta no proviene de un fondo técnico profundo de git o GitHub. Desde esta perspectiva, uno puede considerar esto como una pregunta "principiante" o elemental. Como tal, está redactado y respondido adecuadamente para esta audiencia. Frustrante, claro, pero creo que esta Q, estas Respuestas son apropiadas / relevantes, especialmente para las Q de uso de BLM git / Hub previas.
SherylHohman

Respuestas:

309

Como se mencionó, elimine el antiguo en Github y vuelva a presionar, aunque los comandos utilizados son un poco más detallados de lo necesario:

git push origin :name_of_the_old_branch_on_github
git push origin new_name_of_the_branch_that_is_local

Sencillo. Diseccionando un poco los comandos, el comando git push es esencialmente:

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

Por lo tanto, hacer un push sin local_branch especificado esencialmente significa "no tomar nada de mi repositorio local y convertirlo en la rama remota". Siempre he pensado que esto es completamente grosero, pero así es como se hace.

Editar: a partir de Git 1.7 hay una sintaxis alternativa para eliminar una rama remota:

git push origin --delete name_of_the_remote_branch

Editar: según lo mencionado por @ void.pointer en los comentarios

Tenga en cuenta que puede combinar las 2 operaciones de inserción:

git push origin :old_branch new_branch

Esto eliminará la rama anterior y empujará la nueva.

Esto se puede convertir en un simple alias que toma la rama remota, original y el nuevo nombre de rama como argumentos, en ~/.gitconfig:

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

Uso:

git branchm origin old_branch new_branch

Tenga en cuenta que los argumentos posicionales en los comandos de shell son problemáticos en versiones anteriores (anteriores a 2.8?) De git, por lo que el alias puede variar según la versión de git. Vea esta discusión para más detalles.

Adam Parkin
fuente
32
Tenga en cuenta que puede combinar las operaciones de empuje 2: git push origin :old_branch new_branch. Esto eliminará la rama anterior y empujará la nueva.
void.pointer
44
¿Hay alguna razón por la cual la nueva rama no se puede empujar antes de eliminar la anterior? Personalmente, prefiero los procesos donde la operación de eliminación ocurre después de que la operación de creación es exitosa, en caso de que algo salga mal.
jmort253
77
No funciona. Simplemente volverá a colocar la rama en Github con su antiguo nombre.
Geoff
1
@AdamParkin 1. git branch -m new_branch(cambie el nombre de old_branch a new_branch) 2. git commit -m 'msg', 3. git push4. Mhmm, old_branch aparece en Github, pregunta de Google y me llevan a su respuesta 5. git push origin :old_branch(dice que se eliminó) 6. git push origin new_branch... completa y luego dice * [new branch] new_branch -> old_branch. Vuelve a Github y old_branchvuelve a aparecer. Si elimino en la interfaz de usuario web de Github, tengo la opción de "Restaurar", por lo que parece que presionar new_branch es solo restaurar.
Kcvin
2
Una cosa a tener en cuenta es que cuando cambie el nombre de la sucursal, cualquier solicitud de extracción que tenga abierta contra esa solicitud de extracción se cerrará automáticamente. Tuvimos que cambiar el nombre de la sucursal y luego volver a abrir manualmente todas las solicitudes de extracción ...
jmort253
24

Los siguientes comandos me funcionaron:

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
fuente
Esta es la breve respuesta que funciona. Por cierto, el primer comando también se podría poner como el último en la respuesta.
Eric Wang
esta respuesta cubre git not github
gman
1
En realidad, acabo de hacer esto dos veces y funcionó en github.
Spozun
17

Encontré 3 comandos para cambiar el nombre de la rama de git, y estos comandos son una forma más rápida de hacerlo

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

Si necesita paso a paso, puede leer este gran artículo

Cómo cambiar el nombre de las ramas locales y remotas de Git

Hazarapet Tunanyan
fuente
1
git push --set-upstreames la parte más importante si cambia el nombre de la sucursal localmente usando la aplicación github antes de eliminar la sucursal remota.
Louis Yang
esta respuesta cubre git not github
gman
12

Simplemente elimine la rama anterior y cree una nueva.

Ejemplo (renombrar únicamente la rama remota):

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

Probablemente también debería cambiar el nombre de la sucursal local y cambiar la configuración de dónde empujar / tirar.

Vi.
fuente
1
¿No debería ser el segundo comando git push origin newname:refs/heads/newname? master y newname pueden no apuntar a la misma confirmación.
Steve Folly
"maestro" es solo un ejemplo, cambiará ahora.
Vi.
Tal vez se deba invertir el orden de dos comandos (es decir, cargar el nombre nuevo primero, eliminar el antiguo después de eso)
Vi.
esta respuesta cubre git not github
gman
@gman, ¿Cambiarle el nombre a Git-wise también le cambia el nombre a Github-wise?
Vi.
9

Renombrar sucursales en git local y remoto

1. Cambie el nombre de su sucursal local.

Si está en la rama que desea renombrar:

git branch -m new-name

Si estás en una rama diferente:

git branch -m old-name new-name

2. Elimine la rama remota de nombre antiguo y presione la rama local de nombre nuevo.

git push origin :old-name new-name

3. Restablezca la rama ascendente para la rama local de nuevo nombre.

Cambie a la rama y luego:

git push origin -u new-name

Entonces la conclusión es

git branch -m new-name
git push origin :old-name new-name
git push origin -u new-name
Abdelrahman Mohamed
fuente
esta respuesta cubre git not github
gman
Esto es para git y GitHub está bajo git, por lo que funcionará y funcionará conmigo y con los demás
Abdelrahman Mohamed
No funciona Prueba el primer y segundo paso git branch -m new-name && git push origin :master new-name. Fallará. Si esta respuesta es solo sobre git y no sobre github, entonces esta pregunta es un duplicado de varias otras preguntas y debe cerrarse. Si realmente se trata de github, entonces la respuesta debe cubrir github. Esta respuesta no.
Gman
2

Esto es lo que funcionó para mí:

1.) Cree la nueva rama primero: git push github newname: refs / heads / newname

2.) En el sitio github, vaya a la configuración y cambie la rama predeterminada a newname

3.) Eliminar el antiguo nombre git push github --delete oldname

Wiley
fuente
0
  1. Descargar Atlassian SourceTree (gratis).
  2. Importe su clon local del repositorio.
  3. Haga clic derecho en su rama para cambiar el nombre, en la barra lateral. Seleccione "Cambiar nombre de rama ..." en el menú contextual y cámbiele el nombre.
  4. Empujar al origen.
Ingeniero
fuente
Gracias, pero tuve que cambiar a la sucursal e importarla.
Flash Sheridan
1
esta respuesta cubre git not github
gman
0

Este artículo muestra cómo hacerlo realmente fácil.
1. Para cambiar el nombre de una rama Git local, podemos usar el comando Git branch -m para modificar el nombre:
git branch -m feature1 feature2
2. Si solo está buscando el comando para cambiar el nombre de una rama Git remota, esta es "
git push -u origin feature2:feature3
Compruebe que no tiene etiquetas en la rama antes de hacer esto. Puede hacerlo con git tag.

Daniel Kobe
fuente
esta respuesta cubre git not github
gman
0

Otra forma es renombrar los siguientes archivos :

  1. navegar por el directorio de tu proyecto
  2. renombrar .git/refs/head/[branch-name]a.git/refs/head/new-branch-name
  3. renombrar .git/refs/remotes/[all-remote-names]/[branch-name]a.git/refs/remotes/[all-remote-names]/new-branch-name

Cambie el nombre de cabezales y controles remotos tanto en su PC local como en los orígenes / servidores remotos

La rama ahora se renombra (¡local y remota!)


Atención

Si su nombre de rama actual contiene barras inclinadas ( /), git creará los directorios así:

nombre de sucursal actual: "awe/some/branch"

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

nombre de sucursal del deseo: "new-branch-name"

  1. navegar por el directorio de tu proyecto
  2. copia el brancharchivo de.git/refs/*/awe/some/
  3. ponlo adentro .git/refs/head/.
  4. copie el brancharchivo de todos.git/refs/remotes/*/awe/some/
  5. ponerlos en .git/refs/remotes/*/.
  6. cambiar el nombre de todos los brancharchivos optados a new-branch-name.
  7. compruebe si la estructura de directorios y archivos ahora se ve así:
    • .git/refs/head/new-branch-name
    • .git/refs/remotes/[all-remote-names]/new-branch-name
  8. haga lo mismo en todos sus orígenes / servidores remotos (si existe)
    • info : en servidores remotos generalmente no hay directorios refs / remotes / * porque ya estás en el servidor remoto;) (bueno, tal vez en configuraciones avanzadas de git podría ser posible, pero nunca he visto eso)

La rama ahora se renombra de awe/some/brancha new-branch-name(¡local y remoto!)

Se eliminaron los directorios en nombre de sucursal.


Información: esta manera puede no ser la mejor, pero aún funciona para personas que pueden tener problemas con las otras formas

Iyashi
fuente
esta respuesta cubre git not github
gman
0

En mi caso, necesitaba un comando adicional para que mi rama renombrada avanzara .
git branch --unset-upstream
origin newname

(Para facilitar la escritura), primero git checkout oldname.
Luego ejecute lo siguiente:

git branch -m newname
git push origin :oldname o ogit push origin --delete oldname
git branch --unset-upstream
git push -u origin newname git push origin newname

Este paso adicional solo puede ser necesario porque (tiendo a) configurar el seguimiento remoto en mis sucursales a través de . De esta manera, cuando me he retirado, posteriormente solo necesito escribir en lugar degit push -u origin oldnameoldnamegit pushgit push origin oldname

Si NO uso el comando git branch --unset-upstreamantes git push origin newbranch, git vuelve a crear oldbranch y empuja newbrancha origin oldbranch- derrotando mi intención.

SherylHohman
fuente
esta respuesta cubre git not github
gman
@gman Point tomado. Mi solución usa git localmente para cambiar el nombre de una rama en GitHub, de forma remota, después de renombrarla en la copia local de git del repositorio de GitHub. Entonces, tal vez podría considerarse una solución especializada, para cuando desea utilizar la línea de comandos, en lugar de la interfaz del sitio web de GitHub, y tiene un clon local que también desea actualizar. Gracias por resaltar esta distinción y aclarar que esta respuesta es para un caso especial, en lugar de una solución general.
SherylHohman
El problema es que github vincula las características a las ramas. Intente renombrar master a main y sus instrucciones fallarán.
Gman
-1

Los siguientes comandos cambian el nombre de la rama localmente, eliminan la rama vieja en la ubicación remota y presionan la nueva rama, configurando la rama local para rastrear el nuevo control remoto:

git branch -m old_branch new_branch
git push origin :old_branch
git push --set-upstream origin new_branch
Pooja Mane
fuente
Aunque su fragmento de código puede resolver el problema, debe describir cuál es el propósito de su código (cómo resuelve el problema). Además, es posible que desee consultar stackoverflow.com/help/how-to-answer
Ahmad F
esta respuesta cubre git not github
gman
-1

Tan simple como eso . Para cambiar el nombre de git branch localmente y de forma remota, use este fragmento (probado y funciona de maravilla):

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

Explicación:

  1. Cambiar nombre de paso:

    Referencia de Git: con una opción -m o -M , se le cambiará el nombre. Si tenía un reflog correspondiente, se renombra para que coincida, y se crea una entrada de reflog para recordar el cambio de nombre de la rama. Si existe, -M debe usarse para forzar el cambio de nombre.

  2. Eliminar paso:

    Referencia de Git: git push origin: experimental Encuentre una referencia que coincida con la experimental en el repositorio de origen (por ejemplo, referencias / cabezas / experimental) y elimínela.

  3. Actualización en el paso de repositorio remoto (referencia ascendente para el seguimiento):

    Referencia de Git: --set-upstream Para cada rama que esté actualizada o que se haya enviado correctamente, agregue la referencia de upstream (seguimiento), utilizada por git-pull [1] sin argumentos y otros comandos. Para obtener más información, consulte branch..merge en git-config [1].

avivamg
fuente
esta respuesta cubre git not github
gman
-1

3 pasos simples

  • cabeza de origen de empuje git

  • git branch -m nombre-rama-antiguo nombre-rama-nuevo

  • cabeza de origen de empuje git

Martin Mungai
fuente
esta respuesta cubre git not github
gman
-1

En la rama git, ejecute git branch -m nombre_nuevo nombre_nuevo Esto modificará el nombre de la rama en su repositorio local git push origin: nombre_nuevo nombre_nuevo Esto empujará el nombre modificado a remoto y eliminará la rama antigua git push origin -u nombre_ nuevo Establece la rama local para rastrear rama remota Esto resuelve el problema

Papa Francisco
fuente
esta respuesta cubre git not github
gman