remotas - git remote
git: cambiar el nombre de las ramas de forma remota? (9)
TL; DR
"Cambiar el nombre" de una rama remota es en realidad un proceso de 2 pasos (no necesariamente ordenado):
- eliminación de la rama remota anterior (
git push [space]:<old_name>
como se explica ksrb ); - empujar en una nueva rama remota (diferencia entre un par de comandos de respuestas a continuación).
Borrando
Utilizo TortoiseGit y cuando intenté eliminar la rama por primera vez a través de la línea de comandos, obtuve esto:
$ git push origin :in
fatal: ''origen'' no parece ser un repositorio git
fatal: no se pudo leer desde el repositorio remoto.
Asegúrese de que tiene los derechos de acceso correctos y el repositorio existe.
Esto probablemente se debió a que el concurso no tenía la clave privada cargada (que TortoiseGit carga automáticamente en el concurso ). Además, noté que los comandos de TortoiseGit no tienen la referencia de origin
en ellos (por ejemplo, git.exe push --progress "my_project" interesting_local:interesting
).
También estoy usando Bitbucket y, como otros administradores de git en línea basados en la web (GitHub, GitLab), pude eliminar la sucursal remota directamente a través de su interfaz (página de sucursales):
Sin embargo, en TortoiseGit también puede eliminar sucursales remotas a través de Buscar referencias :
Al hacer clic con el botón derecho en una rama remota (lista de controles remotos), aparece la opción Eliminar rama remota :
Emprendedor
Después de eliminar la rama remota anterior, ingresé directamente en una nueva rama remota a través de TortoiseGit simplemente escribiendo el nuevo nombre en el campo Remoto: de la ventana Push y esta rama se creó automáticamente y se pudo ver en Bitbucket .
Sin embargo, si aún prefiere hacerlo manualmente, un punto que aún no se ha mencionado en este hilo es que -u
= --set-upstream
.
Desde git push
docs , -u
es solo un alias de --set-upstream
, por lo que los comandos en las respuestas de Sylvain ( -set-upstream new-branch
) y Shashank ( -u origin new_branch
) son equivalentes, desde la referencia remota por defecto al origin
si no se definió previamente ninguna otra referencia:
-
git push origin -u new_branch
=git push -u new_branch
desde la descripción de la documentación :Si falta la configuración, el valor predeterminado es
origin
.
Al final, no escribí ni usé manualmente ninguno de los comandos sugeridos por las otras respuestas aquí, así que quizás esto pueda ser útil para otros en una situación similar.
Si hay un repositorio al que solo tengo acceso git: // (y normalmente solo presionaría + tirar), ¿hay una manera de cambiar el nombre de las sucursales en ese repositorio de la misma manera que lo haría localmente con git branch -m
?
Agregando a las respuestas ya dadas, aquí hay una versión que primero verifica si la nueva sucursal ya existe (para que pueda usarla de manera segura en un script)
if git ls-remote --heads "$remote" /
| cut -f2 /
| sed ''s:refs/heads/::'' /
| grep -q ^"$newname"$; then
echo "Error: $newname already exists"
exit 1
fi
git push "$oldname" "$remote/$oldname:refs/heads/$newname" ":$oldname"
(el cheque es de esta respuesta )
No sé por qué, pero la respuesta de @Sylvain Defresne no funciona para mí.
git branch new-branch-name origin/old-branch-name
git push origin --set-upstream new-branch-name
git push origin :old-branch-name
Tengo que desactivar el flujo ascendente y luego puedo configurar el flujo nuevamente. Lo siguiente es como lo hice.
git checkout -b new-branch-name
git branch --unset-upstream
git push origin new-branch-name -u
git branch origin :old-branch-name
No sé si esto es correcto o incorrecto, pero presioné el "nombre antiguo" de la rama al "nuevo nombre" de la rama, luego eliminé la rama antigua completamente con las siguientes dos líneas:
git push origin old_branch:new_branch
git push origin :old_branch
Por supuesto. Simplemente cambie el nombre de la rama localmente, luego presione la nueva rama y presione la eliminación de la antigua. El único problema real es que a otros usuarios del repositorio no se les cambiará el nombre a las sucursales locales de seguimiento.
Primer checkout a la rama que desea renombrar
git branch -m old_branch new_branch
git push -u origin new_branch
Para quitar la rama vieja del control remoto:
git push origin :old_branch
Si realmente solo 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:
git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>
Escribí este script ( git-rename-remote-branch ) que proporciona un atajo práctico para hacer lo anterior fácilmente.
Para integrar el comentario de @ksrb : Lo que esto hace básicamente son dos pulsaciones en un solo comando, primero git push <remote> <remote>/<old_name>:refs/heads/<new_name>
para empujar una nueva rama remota basada en el antiguo control remoto rama de seguimiento y luego git push <remote> :<old_name>
para eliminar la rama remota anterior.
Solo tiene que crear una nueva sucursal local con el nombre deseado, insertarlo en su control remoto y luego eliminar la antigua rama remota:
$ git branch new-branch-name origin/old-branch-name
$ git push origin --set-upstream new-branch-name
$ git push origin :old-branch-name
Luego, para ver el nombre de la rama anterior, cada cliente del repositorio tendría que hacer:
$ git fetch origin
$ git remote prune origin
NOTA: Si su rama antigua es su rama principal, debe cambiar la configuración de su rama principal. De lo contrario, cuando ejecute $ git push origin :old-branch-name
, obtendrá el error "eliminación de la rama actual prohibida" .