¿Cómo cambio el nombre de una sucursal local de Git?

Respuestas:

13740

Si desea cambiar el nombre de una rama mientras señala cualquier rama, haga lo siguiente:

git branch -m <oldname> <newname>

Si desea cambiar el nombre de la rama actual, puede hacer:

git branch -m <newname>

Una forma de recordar esto es -mpara "mover" (o mv), que es cómo cambiar el nombre de los archivos. Agregar un alias también podría ayudar. Para hacerlo, ejecute lo siguiente:

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

Si está en Windows u otro sistema de archivos que no distingue entre mayúsculas y minúsculas, y solo hay cambios de mayúsculas en el nombre, debe usar -M, de lo contrario, git arrojará un error de rama ya existente :

git branch -M <newname>
siride
fuente
87
Lo que realmente quería saber era si esto necesariamente afectará la rama remota cuando / si presionas
PandaWood
181
@PandaWood: agregará la nueva rama cuando presiona, pero no eliminará la rama anterior. Si lo usa git push -f --mirror, cambiará el nombre de la rama en el control remoto, pero solo debe usar este método si el control remoto es simplemente una copia de su repositorio actual. Consulte también esta pregunta: stackoverflow.com/questions/1526794/git-rename-remote-branch
siride el
19
@PandaWood, depende de cómo push.defaultesté configurado. Por defecto ( matching) se enviará a un control remoto cuyo nombre coincida. Tendría que hacerlo git push origin <newname>:<oldname>o creará una nueva rama remota. Sin embargo, si push.defaultestá configurado en upstream, entonces puede push origin heady las cosas irán al nombre antiguo en el control remoto.
Erin Stanfill
13
@ NightOwl888: el -m probablemente es la abreviatura de "mover", siguiendo la convención de Unix de usar el mvpara cambiar el nombre de los archivos. La razón de esto es que mover y renombrar, en un sistema de archivos de inodo basado en directorios, son completamente equivalentes.
siride
51
El nombre largo de la -mopción es --move, por ejemplo, git branch --move masterrenombra la rama actual para que se llame "maestro".
robenkleene
445
git branch -m old_branch_name new_branch_name

El comando anterior cambiará el nombre de su rama, pero debe tener mucho cuidado al usar la rama renombrada, porque aún se referirá a la antigua rama ascendente asociada con ella, si la hay.

Si desea insertar algunos cambios en master después de que su sucursal local cambie de nombre a new_branch_name (nombre de ejemplo):

git push origin new_branch_name:master (ahora los cambios irán a la rama maestra pero el nombre de su rama local es new_branch_name)

Para obtener más detalles, consulte " Cómo cambiar el nombre de su sucursal local en Git ".

Madhan Ayyasamy
fuente
326

Para cambiar el nombre de su sucursal actual:

git branch -m <newname>
Jonathan
fuente
159
Tendrá que usar -M para cambiar el nombre si solo está cambiando las mayúsculas, ya que git le dirá que la rama ya existe.
cjspurgeon
289

Estos son los pasos para cambiar el nombre de la rama:

  1. Cambie a la rama que necesita ser renombrada
  2. git branch -m <new_name>
  3. git push origin :<old_name>
  4. git push origin <new_name>:refs/heads/<new_name>

EDITAR (01/12/2017): asegúrese de ejecutar el comando git statusy verifique que la rama recién creada apunte a su propia referencia y no a la anterior. Si encuentra la referencia a la rama más antigua, necesita desarmar el flujo ascendente usando:

git branch --unset-upstream
Milind Anantwar
fuente
1
¿En qué paso se desarmaría la corriente arriba? Antes del paso 4?
Cyclonecode del
1
Esta es la mejor respuesta aquí, ya que describe el proceso completo para completar correctamente un cambio de nombre
Chris Halcrow
212

Cambiar el nombre de la rama será útil una vez que haya terminado. Luego vendrán cosas nuevas y querrás desarrollarlas en la misma rama en lugar de eliminarlas y crear una nueva.

Desde mi experiencia, para cambiar el nombre de una sucursal local y remota en Git, debe realizar los siguientes pasos.

Citando desde varios estados: cambie el nombre de una rama local y remota en git

1. Cambie el nombre de su sucursal local

Si está en la rama que desea cambiar de nombre:

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

git push origin -u new-name
trungk18
fuente
1
Este funcionó mejor para mí. Aquí los 2 pasos me dieron los siguientes errores: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
1
Tienes el problema al ejecutar el comando git push origin :old-name new-name¿verdad?
trungk18
Sí exactamente (lo siento, quise decir "segundo paso", no "2 pasos" - cansado)
Anto
116

Las respuestas hasta ahora han sido correctas, pero aquí hay información adicional:

Se puede cambiar el nombre de una rama de forma segura con '-m' (mover), pero hay que tener cuidado con '-M', ya que fuerza el cambio de nombre, incluso si ya hay una rama existente con el mismo nombre. Aquí está el extracto de la página del manual 'git-branch':

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

Vanchev
fuente
2
¿Qué le sucede a la rama sobrescrita?
Kevin Dice
Se sobrescribe con el nuevo nombre / rama. Por ejemplo, si tiene las siguientes ramas en git: master b1 <- rama actual b2 después de hacer 'git branch -M b2' solo tendrá: master b2 <- la rama actual b1 desaparecerá y si desea recuperarlo deberías comprobarlo por su hash. Puedes verlo escribiendo 'git reflog'. Salud.
Vanchev
El -Mindicador también es útil para forzar un cambio de nombre si solo está corrigiendo el caso del nombre de la rama, por ejemplo, cambiando myBrancha MyBranch. (Con -m, git regresa fatal: A branch named 'MyBranch' already exists.)
Jon Schneider
92

1. Renombrar

Si es tu sucursal actual, solo hazlo

git branch -m new_name

Si es otra rama a la que desea cambiarle el nombre

git branch -m old_name new_name

2. Rastrea una nueva sucursal remota

- Si su rama fue empujada, luego de cambiarle el nombre, debe eliminarla del repositorio remoto de Git y pedirle a su nuevo local que rastree una nueva rama remota:

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

Tontomente nombré una rama que comenzaba con un guión, y luego verifiqué el maestro. No quería eliminar mi sucursal, tenía trabajo en ella.

Ninguno de estos funcionó:

git checkout -dumb-name

git checkout -- -dumb-name

"s, 'sy \s tampoco ayudaron. git branch -mno funciona

Así es como finalmente lo arreglé. Vaya a la copia de trabajo .git / refs / heads, busque el nombre de archivo "-dumb-name", obtenga el hash de la rama. Luego, esto lo comprobará, creará una nueva sucursal con un nombre sensato y eliminará la anterior.

git checkout {hash}
git checkout -b brilliant-name
git branch -d -- -dumb-name
Samuel Meacham
fuente
8
¿No podría haber cambiado el nombre del archivo en referencias / cabezas?
android.weasel
Ídem. Si tiene que cavar en la estructura del directorio para hacer esta magia, vaya hasta el final y haga un 'mv - -dumb-name brilliant-name' Haga una 'git branch -av' y verá una estructura de directorio de .git / refs. O tal vez 'grep -R ^ .git / refs' para ver los hashes directamente.
Dave X
2
Probablemente podría haber usadoreflog
Code Whisperer
Honestamente, si esa es la ruta que querías tomar, evitaría el (IMO confuso y potencialmente peligroso si no sabes lo que estás haciendo) atravesar el directorio .git en primer lugar, y simplemente hacerlo con algunos comandos normales con algún análisis de "git log" (usando las banderas apropiadas para mostrar ramas, y para averiguar de qué shasum desea sacar una nueva rama), y luego hacerlo. Luego, elimine la rama con nombre raro. Yo desprecio que git insiste en que es necesario comprender la totalidad de sus mecanismos internos que hacer algunas cosas, pero en gran medida aprecio que puede hacer esas cosas.
Jon V
Es más difícil crear una rama con un mal nombre en 2.10.1+. Si de alguna manera lo haces, puedes usar git branch -v para obtener la versión corta de hash de tus ramas (agrega -r para control remoto). Luego puede usar git rev-parse <shorthash> para obtener el hash completo si lo necesita.
House of Dexter
67

Para cambiar el nombre de una sucursal localmente:

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

Ahora también tendrá que propagar estos cambios en su servidor remoto.

Para impulsar los cambios de la rama antigua eliminada:

git push origin :[old-branch]

Para impulsar cambios de creación de nueva sucursal:

git push origin [new-branch]
aliasav
fuente
57

Solo tres pasos para replicar el cambio de nombre remoteen GitHub:

Paso 1 git branch -m old_branchname new_branchname

Paso 2 git push origin :old_branchname new_branchname

Paso 3 git push --set-upstream origin new_branchname

Harry_pb
fuente
2
También tuve que hacer una cosa adicional: git push --set-upstream origin new_branchnameque se menciona en la respuesta de
@Nomade
2
Paso 3 no es necesario. Todo estaba actualizado después del Paso 2.
Dev
@Dev no en todos los casos Dev, tuve que actualizar recientemente desde que usé bitbucket y codecommit, el paso 3 es necesario
Harry_pb
40

Cambie el nombre de la rama con este comando:

git branch -m [old_branch_name] [new_branch_name]

-m: Renombra / mueve la rama. Si ya hay una sucursal, recibirá un error.

Si ya hay una rama y desea cambiar el nombre de esa rama, use:

 git rename -M [old_branch_name] [new_branch_name]

Para obtener más información acerca de la ayuda, use este comando en la terminal:

git branch --help

o

man git branch
Hafiz Shehbaz Ali
fuente
40

Los usuarios avanzados de Git pueden cambiar el nombre 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
fuente
34
  1. Cambia el nombre de tu sucursal local.

Si está en la rama que desea cambiar de nombre:

git branch -m new-name

Si estás en una rama diferente:

git branch -m old-name new-name
  1. Elimine la rama remota de nombre antiguo y presione la rama local de nombre nuevo.

git push origin :old-name new-name

  1. Restablezca la rama ascendente para la rama local de nuevo nombre. Cambie a la rama y luego:

git push origin -u new-name

O para una forma rápida de hacerlo, puede utilizar estos 3 pasos:

# Renombrar sucursal localmente

git branch -m old_branch new_branch  

# Eliminar la antigua rama remota

git push origin :old_branch  

# Empuje la nueva rama, configure la rama local para rastrear el nuevo control remoto

git push --set-upstream origin new_branch   

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

badarshahzad
fuente
esto funciona para mí
Vazgen Manukyan
26

Aquí hay tres pasos: Un comando que puede llamar dentro de su terminal y cambiar el nombre de la sucursal.

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 más: paso a paso, Cómo cambiar el nombre de la rama de Git es un buen artículo sobre eso.

Hazarapet Tunanyan
fuente
25

Probablemente, como lo mencionaron otros, este será un desajuste de caso en el nombre de la rama.

Si tiene tal situación, puedo adivinar que está en Windows, lo que también lo llevará a:

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

Entonces tienes que hacer un paso intermedio:

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

Nada mas.

P4C
fuente
1
Tenga en cuenta que esta situación también puede surgir en una Mac, que también es (excepcionalmente molesto) entre mayúsculas y minúsculas en su sistema de archivos.
Jon V
Alternativamente, puede usar en -Mlugar de -mhacer este tipo de cambio de nombre de "arreglo de carcasa" en un solo paso.
Jon Schneider
23

Intentando responder específicamente a la pregunta (al menos el título).

También puede cambiar el nombre de la sucursal local , pero sigue rastreando el nombre antiguo en el control remoto.

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

Ahora, cuando ejecuta git push, la old_branchreferencia remota se actualiza con su local new_branch.

Tienes que conocer y recordar esta configuración. Pero puede ser útil si no tiene la opción para el nombre de la sucursal remota, pero no le gusta (¡oh, quiero decir, tiene una muy buena razón para que no le guste!) Y prefiere una más clara nombre de su sucursal local.

Jugando con la configuración de búsqueda, incluso puede cambiar el nombre de la referencia remota local. es decir, tener un refs/remote/origin/new_branchpuntero de referencia a la rama, de hecho es el old_branchencendido origin. Sin embargo, desaconsejo esto, por la seguridad de su mente.

Pierre-Olivier Vares
fuente
22

Cambiar la sucursal localmente es bastante fácil ...

Si está en la rama a la que desea cambiar el nombre, simplemente haga esto:

git branch -m my_new_branch

De lo contrario, si usted está en mastero cualquier otra rama distinta de la que desea cambiar el nombre, sólo tiene que hacer:

git branch -m my_old_branch my_new_branch

Además, creo la imagen a continuación para mostrar esto en acción en una línea de comando . En este caso, estás en una mastersucursal, por ejemplo:

Cambiar el nombre de la sucursal localmente

Alireza
fuente
21

Si está dispuesto a usar SourceTree (que recomiendo encarecidamente), puede hacer clic con el botón derecho en su rama y elegir 'Cambiar nombre'.

ingrese la descripción de la imagen aquí

Marcin Szymczak
fuente
20

Para cambiar el nombre de la rama actual (excepto para el estado HEAD separado) también puede usar este alias:

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

Otra opción es no usar la línea de comando en absoluto. Los clientes de Git GUI como SourceTree eliminan gran parte de la curva de aprendizaje sintáctico / dolor que hace que preguntas como esta se encuentren entre las más vistas en Stack Overflow.

En SourceTree, haga clic derecho en cualquier rama local en el panel "Ramas" a la izquierda y seleccione "Cambiar nombre ...".

Steve Chambers
fuente
55
No lo llamaría dolor. El comando git es muy fácil de usar, una vez que haya visto esta respuesta, probablemente nunca volverá nuevamente. El problema es más que, por lo que parece, la documentación de la línea de comandos de git no es lo suficientemente intuitiva.
Nearoo
1
Es cierto, pero con SourceTree casi nunca necesito preocuparme por verificar la documentación. En general, todo es intuitivo: solo haga clic derecho y vea cuáles son las opciones. (Por cierto, no estoy afiliado a ellos de ninguna manera, ¡al igual que la herramienta!)
Steve Chambers
17

Una forma simple 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

Para más, mira esto .

Nomade
fuente
15

Dado que no desea enviar la rama a un servidor remoto, este ejemplo será útil:

Supongamos que tiene una rama existente llamada "my-hot-feature" y desea cambiarle el nombre a "feature-15".

Primero, desea cambiar su sucursal local. Esto no podría ser más fácil:

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

Para obtener más información, puede visitar Cambiar de nombre local y remotamente una sucursal en Git .

Tanah
fuente
13

Git versión 2.9.2

Si desea cambiar el nombre de la sucursal local en la que se encuentra:

git branch -m new_name

Si desea cambiar el nombre de una rama diferente:

git branch -m old_name new_name

Si desea cambiar el nombre de una rama diferente a un nombre que ya existe:

git branch -M old_name new_name_that_already_exists

Nota: El último comando es destructivo y cambiará el nombre de su rama, pero perderá la rama vieja con ese nombre y esas confirmaciones porque los nombres de las ramas deben ser únicos.

nikkypx
fuente
11

Si desea cambiar el nombre de la rama actual, ejecute:

git branch -m [old_branch] [new_branch]

Si desea eliminar la rama remota anterior, ejecute:

git push origin :[old_branch]

Si desea eliminar la antigua rama remota y crear una nueva rama remota, ejecute:

git push origin :old_branch new_branch
Arif
fuente
6

El cambio de nombre de la rama de Git se puede hacer usando:

  1. git branch -m oldBranch newBranch

  2. git branch -M oldBranch ExistingBranch

La diferencia entre -m y -M :

-m: si está intentando cambiar el nombre de su sucursal con un nombre de sucursal existente usando -m . Aparecerá un error diciendo que la rama ya existe. Necesitas dar un nombre único.

Pero,

-M: esto te ayudará a forzar el cambio de nombre con un nombre dado, incluso si existe. Por lo tanto, una rama existente se sobrescribirá por completo con ella ...

Aquí hay un ejemplo 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
fuente
5

Para los usuarios de Git GUI no podría ser mucho más simple. En la GUI de Git, elija el nombre de la rama de la lista desplegable en el cuadro de diálogo "Cambiar nombre de rama" creado a partir del elemento de menú Rama: Cambiar nombre, escriba un nuevo nombre y haga clic en "Cambiar nombre". He resaltado dónde encontrar la lista desplegable.

Cambiar el nombre de una sucursal local de Git

Ivan
fuente
3

Si quieres:

  • Cambie el nombre del repositorio de Git, ejecute: git branch -m <oldname> <newname>
  • Eliminar la rama anterior por: git push origin: old-name new-name
  • Compromételo con: git commit <newname>
    • y luego presione usando: git push origin new_branch_name:master
  • Si desea verificar el estado, use: git status
  • Si quieres echar un vistazo, usa: git checkout
Vineet Jain
fuente
3

Todas las respuestas anteriores están hablando git branch -m. Por supuesto, es fácil de operar, pero para mí, puede ser un poco difícil recordar otro comando de Git. Así que intenté hacer el trabajo con el comando con el que estaba familiarizado. Sí, puedes adivinarlo.

Yo uso git branch -b <new_branch_name>. Y si no desea guardar la rama anterior ahora, puede ejecutarla git branch -D <old_branch_name>para eliminarla.

Sé que puede ser un poco tedioso, pero es más fácil de entender y recordar. Espero que sea útil para ti.

Dai Kaixian
fuente
Si tienes problemas para recordar comandos, puedes configurar alias de shell o git por ti mismo.
sean
¿Qué pasa si necesito ejecutar el comando en tantas máquinas diferentes?
Dai Kaixian
1

En PhpStorm:

VCS → Git → Sucursales ... → Sucursales locales → _your_branch_ → Cambiar nombre

AlexSi
fuente
0

Todo lo que tienes que hacer son los tres pasos:

  1. Dale a la antigua rama bajo .git / refs / heads el nuevo nombre
  2. Dale a la antigua rama bajo .git / logs / refs / heads el nuevo nombre
  3. Actualice .git / HEAD para conducir a su nuevo nombre de sucursal

fuente