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

457

Tengo cuatro ramas como master -> origin / recupecy, FeatureA -> origin / FeatureA. Como puede ver, escribí el nombre equivocado.

Por lo tanto, quiero cambiar el nombre de una rama remota (origen / recuperación → origen / legado u origen / maestro)

Intento el siguiente comando:

git remote rename regacy legacy

Pero la consola de Git me devolvió un mensaje de error.

 error : Could not rename config section 'remote.regacy' to 'remote.legacy'

¿Como puedó resolver esté problema?

JayD
fuente

Respuestas:

809

Ingrese la descripción de la imagen aquí


Hay algunas maneras de lograr eso:

  1. Cambie su sucursal local y luego empuje sus cambios
  2. Empuje la rama al control remoto con el nuevo nombre manteniendo el nombre original localmente

Cambiar el nombre de local y remoto

# Rename the local branch to the new name
git branch -m <old_name> <new_name>

# Delete the old branch on remote - where <remote> is, for example, origin
git push <remote> --delete <old_name>

# Or shorter way to delete remote branch [:]
git push <remote> :<old_name>

# Push the new branch to remote
git push <remote> <new_name>

# Reset the upstream branch for the new_name local branch
git push <remote> -u <new_name>

Ingrese la descripción de la imagen aquí


Renombrar solo rama remota

Crédito: ptim

# In this option, we will push the branch to the remote with the new name
# While keeping the local name as is
git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

Nota IMPORTANTE:

Cuando usa git branch -m(mover), Git también actualiza su rama de seguimiento con el nuevo nombre.

git remote rename legacy legacy

git remote renameestá intentando actualizar su sección remota en su archivo de configuración. Cambiará el nombre del control remoto con el nombre dado al nuevo nombre, pero en su caso, no encontró ninguno, por lo que el cambio de nombre falló.

Pero no hará lo que piensas; cambiará el nombre de su configuración remota local y no la rama remota. 


Tenga en cuenta que los servidores de Git pueden permitirle cambiar el nombre de las ramas de Git utilizando la interfaz web o programas externos (como Sourcetree, etc.), pero debe tener en cuenta que en Git todo el trabajo se realiza localmente, por lo que se recomienda utilizar los comandos anteriores al trabajo.

CodeWizard
fuente
Todavía necesita hacer algo, después de lo anterior y cuando intento tirar, recibo un mensaje:Your configuration specifies to merge with the ref ''refs/heads/old_name'
Krzysztof Krasoń
66
No te olvides de desarmar el viejo upstream:git checkout <new_name> ; git branch --unset-upstream
Miguel Ping
2
El comentario de @MiguelPing es importante. Al intentar cambiar el nombre de una rama, ya la he empujado a github, eliminando, renombrando local, y volviendo a presionar, se vuelve a usar el nombre antiguo. Si --unset-upstreamantes de volver a empujar, funciona según lo previsto.
Adam Tuttle
1
¿Hay alguna manera de evitar el cierre automático de los RP abiertos en la rama de nombre antiguo en el control remoto? Enfrenté esto en gitlab, donde el RP del antiguo nombre de la sucursal se cerró después de presionar al origen.
Himanshu Tanwar
142

Si ha nombrado incorrectamente una rama Y la ha enviado al repositorio remoto, siga estos pasos para cambiar el nombre de esa rama ( según este artículo ):

  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 old-namerama remota y presione la new-namerama local :
    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

ZILONG PAN
fuente
1
Después de los primeros 2 pasos, si recibe un mensaje de error sobre los puntos de rama actuales a una rama de inexistencia en el repositorio remoto, el tercer paso arregla esto
Kevin Hooke,
1
@ Dr1Ku Necesita saber la diferencia entre git push <remote> --delete old_name& git push origin :old-name new-namepara eliminar una rama.
Ashutosh Chamoli
Usuarios de BitBucket: corrija el error en el Paso 2 si cambia el nombre master, en Detalles del repositorio establezca la rama predeterminada en una nueva rama. El error es:By default, deleting the current branch is denied, because the next 'git clone' won't result in any file checked out, causing confusion. You can set 'receive.denyDeleteCurrent' configuration variable to 'warn' or 'ignore' in the remote repository to allow deleting the current branch, with or without a warning message. To squelch this message, you can set it to 'refuse'. error: refusing to delete the current branch: refs/heads/master
Colin
el más fácil entre otros
Abdulla Nilam hace
37

Parece que hay una forma directa:

Si realmente desea cambiar el nombre de las sucursales de forma remota (sin cambiar el nombre de las sucursales locales al mismo tiempo), puede hacerlo con un solo comando como

git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

Renombrar sucursales de forma remota en Git

Vea la respuesta original para más detalles.

ptim
fuente
1
No funcionó en git Se 2.20.1eliminó la rama anterior pero no se creó la nueva.
Paul Razvan Berg
26

También se puede hacer de la siguiente manera.

Primero cambie el nombre de la sucursal local, luego la sucursal remota.

Renombrar la sucursal local:

Si inició sesión en otra sucursal,

git branch -m old_branch new_branch 

Si inició sesión en la misma sucursal,

git branch -m new_branch

Cambiar el nombre de la rama remota:

git push origin :old_branch    // Delete the remote branch

git push --set-upstream origin new_branch   // Create a new remote branch
Atequer Rahman
fuente
5

Si ya ha introducido el nombre incorrecto en remoto, haga lo siguiente:

  1. Cambie a la sucursal local que desea renombrar

    git checkout <old_name>

  2. Cambiar el nombre de la sucursal local

    git branch -m <new_name>

  3. Empuje la <new_name>rama local y restablezca la rama ascendente

    git push origin -u <new_name>

  4. Eliminar la <old_name>rama remota

    git push origin --delete <old_name>

Esto se basó en este artículo .

Milesmeow
fuente
4

Adjuntar un fragmento simple para cambiar el nombre de su rama actual (local y en origen):

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

Explicación de git docs:

Se cambiará el nombre de la opción git branch -mo -M. Si tenía un registro correspondiente, se renombra para que coincida, y se crea una entrada de registro para recordar el cambio de nombre de la rama. Si existe, -M debe usarse para forzar el cambio de nombre.

La especificación de referencia especial: (o +: para permitir actualizaciones que no son de avance rápido) indica a Git que empuje ramas "coincidentes": para cada rama que existe en el lado local, el lado remoto se actualiza si ya existe una rama del mismo nombre en el lado remoto.

--set-upstream Configura la información de seguimiento de la configuración, por lo que se considera la rama ascendente. Si no se especifica, el valor predeterminado es la rama actual.

avivamg
fuente
3

No hay un método directo

  1. Renombrar sucursal local ,

    Mi rama actual es maestra

    git branch -m master_renamed #master_renamed es el nuevo nombre del maestro

  2. Eliminar sucursal remota,

    git push origin --delete master #origin es nombre_remoto

  3. Empuje la rama renombrada al control remoto,

    git push origin master_renamed

Eso es...

Mohideen bin Mohammed
fuente
Agradable y simple y solo 3 pasos. La única mejora que puedo sugerir es git push -u origin master_renamedestablecer la rama como una rama de seguimiento
ut9081
2

Esto se puede hacer incluso sin renombrar la sucursal local en tres simples pasos:

  1. Ve a tu repositorio en GitHub
  2. Cree una nueva rama a partir de la rama anterior cuyo nombre desea cambiar
  3. Eliminar la rama vieja
Code_Mode
fuente
0

Uso estos alias de git y prácticamente hace el trabajo automáticamente:

git config --global alias.move '!git checkout master; git branch -m $1 $2; git status; git push --delete origin $1; git status; git push -u origin $2; git branch -a; exit;'

Uso: git move FROM_BRANCH TO_BRANCH

Funciona si tiene los nombres predeterminados como maestro, origen, etc. Puede modificarlo como desee, pero le da la idea.

Tarik
fuente
0

Tuve que hacer la siguiente tarea para cambiar el nombre de la sucursal local y remota:

# Rename the local branch to the new name
git branch -m <old_name> <new_name>

#  Delete the old remote branch
git push origin --delete <old_name>

# push to new remote branch - creates new remote branch
git push origin <new_name>

# set new remote branch as default remote branch for local branch
git branch --set-upstream-to=origin/<new_name> <new_name>
Sebastian Viereck
fuente
¿Cómo es diferente de la respuesta existente?
Himanshu Tanwar
0
  1. Cambia el nombre de tu sucursal local. Si está en la rama que desea cambiar de nombre:

    git branch -m nombre-nuevo

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.

    origen de inserción de git: nombre antiguo nombre nuevo

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

    git push origin -u nombre-nuevo

¡Todo listo!

Anupam Maurya
fuente
0
  • Cambia el nombre de tu sucursal local .

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

git branch -m new-name

si permanece en una sucursal diferente en el momento actual:

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

Manténgase en la rama objetivo y:

git push origin :old-name new-name
  • Restablezca la rama ascendente para la rama local de nuevo nombre.

Cambie a la rama de destino y luego:

git push origin -u new-name
Vitaliy Andrusishyn
fuente