
¿Cómo eliminar ramas remotas y locales en Git?
Analizar, diseñar, codificar, probar y mantener. Todas son actividades dentro del proceso de desarrollo de software, pero, ¿limpiar? Sí, justo como eso que hacemos luego de comer sobre nuestro escritorio, limpiar las migajas en nuestro espacio de trabajo.
No basta con eliminar nuestra rama desde Github (Gitlab, Bitbucket, etc.) luego de que nuestros cambios se hayan integrado al código base. Esto solo elimina la rama en el remote, esto es la primera parte de la limpieza. ¿La segunda? Nuestro repositorio local.
Hoy quisiera contarles sobre un proceso sencillo para mantener actualizado su repositorio antes de iniciar a trabajar en una nueva funcionalidad como developers.
Primero, obtenemos el listado de ramas locales
Podríamos ejecutar el comando git branch
y nuestra terminal mostrará algo como esto:
feature/navigation-controls
fix/button-color
feature/add-super-button
develop
Sin embargo, lo que realmente nos interesa es ver el panorama más amplio. Si ejecutamos git branch -a
, dependiendo el estado actual de nuestro repositorio, veremos algo similar a:
feature/navigation-controls
fix/button-color
feature/add-super-button
master
develop
remotes/origin/chore/add-storybook
remotes/origin/feature/navigation-controls
remotes/origin/feature/add-super-button
remotes/origin/develop
remotes/origin/master
remotes/origin/chore/add-proposal-card
La bandera -a
nos ayudará a listar todas las referencias a ramas locales y remotas. Esto nos permitirá determinar qué ramas han quedado ociosas y debemos eliminar.
Nota: Existe la posibilidad de encontrarnos con la situación donde una referencia del listado ya no exista en nuestro repositorio remoto. En la siguiente sección lidiaremos con eso.
Siguiente paso: limpiamos las referencias remotas
El comando mágico es:
git remote prune origin
Esto solo eliminará las referencias a ramas remotas que ya no existen, la consola te confirmará que referencias se removieron:
* [pruned] origin/chore/add-proposal-card
* [pruned] origin/chore/add-storybook
* [pruned] origin/feature/super-button
Consideraciones:
- El comando sólo eliminará las ramas relacionadas al
origin
(remote que especifiquemos como parte del comando) - Puedes volver a ejecutar
git branch -a
para verficar los cambios. - Para más información, Atlassian tiene un buen tutorial sobre git prune.
Finalmente, solo queda limpiar las ramas locales
Sabemos que la estructura del comando para eliminar una rama es:
git branch -d <your-branch-name> <another-branch-if-u-need>
Entonces, el siguiente comando eliminará la rama feature/add-super-button
:
git branch -d feature/add-super-button
Sólo necesitas aplicar esto para cada una de las ramas que deseas eliminar. Un tip aquí es que puedes eliminar múltiples ramas separando cada rama con un espacio:
git branch -d feature/add-super-button chore/add-storybook
Nota: Si reemplazamos -d
por -D
estaremos forzando a Git a que elimine nuestra rama sin importar que nuestros cambios aún no se hayan integrado, así que debemos ser cuidadosos de no eliminar trabajo en progreso.
Para confirmar que todo ha resultado como lo pensamos, vuelve a ejecutar:
git branch -a
¡Listo! Tendremos un repositorio local actualizado sólo con las referencias remotas existentes y nuestro trabajo local en progreso o por iniciar.
Dato curioso
El mise en place es un conjunto de tareas para organizar y ordenar los ingredientes que un cocinero necesita antes de iniciar a cocinar. Este es un ejemplo de como un espacio de trabajo ordenado y limpio son parte del flujo de trabajo normal en otras disciplinas.
La limpieza es una de esas prácticas que todo chef realiza, no importa si cuenta con poca o mucha experiencia.
Listo, repite de vez en cuando
De la misma forma en que tu casa requiere limpieza periódica, tu espacio de trabajo también 🤭. Esto no sólo es un muy hábito de limpieza con propiedades catárticas, también es un excelente hábito que debemos adoptar para nuestro proceso personal de desarrollo de software.