¿Cuándo eliminar ramas en Git?
Supongamos que tenemos una aplicación que es estable.
Mañana, alguien informa un error importante que decidimos corregir de inmediato. Así que creamos una rama para esa revisión fuera de "master", la llamamos "2011_Hotfix" y la subimos para que todos los desarrolladores puedan colaborar para solucionarla.
Arreglamos el error y fusionamos "2011_Hotfix" con "master", así como con la rama de desarrollo actual. Y presione "maestro".
¿Qué hacemos ahora con "2011_Hotfix"? ¿Debería simplemente permanecer ahí como una rama para siempre hasta el fin de los tiempos o deberíamos eliminarla ahora, ya que ha cumplido su propósito? Parece sucio dejar ramas por todas partes, ya que la lista de ramas probablemente será muy larga, la mayoría de las cuales ya ni siquiera son necesarias.
En caso de que se elimine, ¿qué pasará con su historial? ¿Se mantendrá esto incluso aunque la sucursal actual ya no esté disponible? Además, ¿cómo eliminaría una sucursal remota?
Puedes eliminar una rama de forma segura con git branch -d yourbranch
. Si contiene cambios no fusionados (es decir, perdería confirmaciones al eliminar la rama), git se lo informará y no lo eliminará.
Por lo tanto, eliminar una rama fusionada es económico y no le hará perder ningún historial.
Para eliminar una rama remota, use git push origin :mybranch
, asumiendo que su nombre remoto es origen y la rama remota que desea eliminar se llama mybranch.
Lo que debes hacer es etiquetar todo lo que publiques. Mantenga ramas a mano para cuando se esté desarrollando activamente.
Eliminar ramas antiguas con
git branch -d branch_name
Eliminarlos del servidor con
git push origin --delete branch_name
o la sintaxis antigua
git push origin :branch_name
que dice "no insertar nada en nombre_rama en el origen".
Dicho esto, siempre que el DAG (gráfico acíclico dirigido) pueda señalarlo, las confirmaciones estarán ahí en la historia.
Google "git-flow" y eso puede brindar más información sobre la gestión de lanzamientos, la bifurcación y el etiquetado.
Dado que la pregunta tiene la etiqueta "github", también agregaría esto: específicamente en Github , si realiza una solicitud de extracción de una rama y se fusiona (ya sea a través de la interfaz de usuario o fusionando la rama de la solicitud de extracción), no lo hará. perderá los datos de la solicitud de extracción (incluidos los comentarios), incluso si elimina la rama .
Una consecuencia de esto: si incorpora solicitudes de extracción como parte de su flujo de trabajo (que combina perfectamente con las revisiones de código), puede eliminar ramas de forma segura tan pronto como se fusionen. Esto es tan común que recientemente Github agregó una característica (dulce) que muestra un botón de "eliminar rama" justo después de fusionar una solicitud de extracción.
Pero vale la pena señalar que cada grupo debe adoptar el flujo de trabajo que más le convenga (y esto puede conducir o no a la eliminación de dichas ramas). Mi equipo de trabajo actual, por ejemplo, elimina todas las ramas que no están relacionadas con la maestra o la implementación (por ejemplo, producción, preparación, etc.) tan pronto como se fusionan sus solicitudes de extracción, y todavía tenemos un seguimiento completo de cómo se formaron las confirmaciones relacionadas. cada mejora incremental de cada producto.
Por supuesto, ninguna gestión del historial (solicitudes de extracción o de otro tipo) reemplaza el etiquetado adecuado de las versiones (que preferiblemente se automatiza con la misma herramienta/script que implementa/empaqueta una versión), por lo que siempre puede cambiar rápidamente a lo que sea que estén sus usuarios. en un momento dado. El etiquetado también es la clave para resolver su problema original: si establece que cualquier rama fusionada con las ramas de "trabajo" puede y debe eliminarse, y que cualquiera que esté fusionada con una etiqueta de versión, "producción", etc. no debe , siempre tendrás las revisiones activas hasta que se integren en una versión futura.
Yo agregaría que la desventaja de eliminar ramas es que romperá cualquier hipervínculo a esas ramas en GitHub (esta pregunta está etiquetada como github). Recibirás un 404 Not Found
error para esos enlaces. Es por eso que cambio mis enlaces para que apunten a una confirmación o etiqueta después de eliminar una rama en GitHub.
Debido a que algunos enlaces no se pueden cambiar, como en el correo electrónico, ahora evito por completo los hipervínculos a las ramas de GitHub y los enlace a una confirmación o etiqueta desde el primer día.
Prefiero eliminar las ramas después de fusionarlas. Esto evita el desorden visual de una larga lista de ramas en su repositorio. Estas ramas también se propagan a todas las bifurcaciones del repositorio.
Primero elimino mi sucursal local. Esto evita que se pueda empujar accidentalmente más tarde.
git branch -d branchName
Luego elimino la rama de seguimiento remoto.
git branch -dr remoteName\branchName
Luego elimino la rama en GitHub. Utilizo la interfaz web, pero el comando equivalente se encuentra a continuación.
git push remoteName :branchName
Incluso si la rama nunca se fusiona, normalmente me gustaría mantener las confirmaciones para la posteridad. Sin embargo, todavía me gusta eliminar la rama. Para distribuir las confirmaciones y evitar que el recolector de basura se las coma, hago una etiqueta anotada que apunta a la misma confirmación que la rama eliminada.
git tag -a tagName commitOrBranchName
Luego envío la etiqueta a github.
git push remoteName tagName