En este artículo veremos cómo eliminar eficazmente una rama de desarrollo de nuestro repositorio git tanto de manera local como en el repositorio remoto.
Un nuevo pequeño tutorial de git llega al blog. Lo primero aclarar que git es una grandérrima herramienta y que no soy ningún experto.
Las ramas de desarrollo se utilizan en git, para realizar pruebas y modificaciones del código, sin tocar nada de la rama estable y que sabemos que funciona y que quizás está en producción en algún sitio funcionando.
Trabajar en la rama de pruebas hace que podamos estar tranquilos de hacer modificaciones, sin miedo a «romper» nada importante. Si al final todo está bien unimos al rama de pruebas con la principal y a funcionar.
Si después de las pruebas queremos eliminar esa rama de desarrollo paralela la podemos eliminar sin que deje de funcionar el código estable. Este tutorial trata sobre eso, sobre cómo eliminar esa rama de pruebas tanto de nuestra copia local del repositorio, como del repositorio remoto que está en algún servidor de git.
Si me decido a publicar tutoriales sobre git, es porque alguna vez he tenido la necesidad de hacer algo en especial y buscando he encontrado información sobre cómo hacerlo. Y cuando esta información está en inglés me animo a traducirlo para tratar de difundirlo.
En este caso este artículo es una traducción/adaptación del artículo en inglés de la web linuxize.com a quienes he pedido permiso para poder traducir y publicarlo en mi web. Tienes el artículo en este enlace:
Eliminar una rama de manera local
Para eliminar una rama de manera local en nuestra copia del repositorio utilizaremos el comando git branch
con la opción -d
(--delete
)
git branch -d nombre_de_la_rama
Si tratas de eliminar una rama que contiene cambios en el código que no se han incluido (merged) todavía, saltará una notificación con el siguiente error:
error: The branch 'branch_name' is not fully merged.
If you are sure you want to delete it, run 'git branch -D nombre_de_la_rama'.
Esto nos dice que tenemos que forzar el borrado de la rama utilizando la opción -D
( --delete --force
)
git branch -D nombre_de_la_rama
Parece obvio que todos los cambios de la rama que no se hayan incluido (merged) se perderán al borrar dicha rama. Podremos ver qué ramas contienen cambios que todavía no se han incluido mediante el comando:
git branch --no-merged
.
Tampoco podremos eliminar una rama si estamos ubicados en ella. Primero tendremos que cambiar de rama y después ya podremos eliminar la rama en la que estábamos:
git branch -d branch_name
Eliminar una rama en el repositorio remoto
Borrar la rama de manera local, no hace que se elimine la rama si esta está en el repositorio remoto (GitLab, gitea, GitHub, etc…) Para eliminarla deberemos hacer un git push
añadiendo la opción -d
(--delete
)
git push origin --delete nombre_de_la_rama
También puede existir la posibilidad de que alguien más con acceso al repositorio haya borrado ya la rama que quieres borrar. Si esto pasa, obtendrás este mensaje al ejecutar el comando anterior
error: unable to push to unqualified destination: branch_name The destination refspec neither matches an existing ref on the remote nor begins with refs/, and we are unable to guess a prefix based on the source ref. error: failed to push some refs to 'git@example.com:/my_repo'
Cuando esto pasa, necesitarás sincronizar tu lista de ramas del repositorio mediante el comando:
git fetch -p
Como hemos visto, de esta manera podremos eliminar una rama que hemos utilizado para probar cosas al margen de la rama principal y que ya hemos hecho «merged» o que queremos sin más eliminarla.
Aquí queda para futuras referencias. ¿Tienes otros trucos para hacerlo? ¿Cómo trabajas esto con git? Compártelo en los comentarios del blog:
Hola Victor,
Pues no conocía ese parámetro. Cuando yo empecé a usar git no existía.
La forma con la que yo he borrado siempre las ramas en el repositorio remoto es mediante el siguiente truco:
git push origin :rama
La sintaxis es: git push $remote_name $local_branch_name:$remote_branch_name
Así que básicamente estás diciendo: lleva la nada a la rama remota
En cuanto al comando «git fetch -p», que sólo actualiza un repositorio remoto, yo uso
git remote update -p
que actualiza todas las ramas de todos los remotos y además limpia las que ya no existen.
Como es tan largo me hice un alias de git, en .gitconfig, y ejecuto «git rup»
Aunque acabo de mirar el manual y ya han añadido una opción «–all» para fetch.
Así que el equivalente sería
git fetch –all -p
¡Un saludo!
muchas gracias por completar el artículo con tu experiencia!! 🙂 Se agradece un montón!!
Saludos!!