Por qué importa
Una rama mal nombrada cuesta minutos en cada PR review, dificulta auditar el repo y complica la automatización (regex en CI/CD, bots de gestión). Una buena convención hace que con leer el nombre se sepa qué tipo de cambio es, a qué ticket apunta y qué área toca.
El patrón estándar
<tipo>/<ticket>-<descripcion-corta>. Ejemplo:
feature/PROJ-123-add-user-login. La barra / separa el prefijo;
algunos hosts (GitHub, GitLab) la renderizan como subcarpeta visual. El kebab-case dentro
del slug evita problemas con shells y URLs.
Prefijos comunes
- feature/: nueva funcionalidad.
- fix/: corrección de bug no urgente.
- hotfix/: corrección que va directo a producción.
- release/: rama de preparación de release.
- chore/: tareas de mantenimiento, dependencias.
- docs/: solo documentación.
- experiment/ o spike/: pruebas que pueden no llegar a main.
GitFlow vs trunk-based
En GitFlow hay ramas long-lived (develop, main,
release/*). En trunk-based, hay main y ramas short-lived que se
mergean en horas o días. La convención de nombre es la misma; trunk-based simplemente
empuja a que las ramas vivan menos tiempo.
Caracteres prohibidos
Git no permite espacios, dos puntos seguidos (::), interrogación,
asteriscos, corchetes o tildes en nombres de rama. Mantenete con
[a-z0-9-_/.]. Slashes adicionales se aceptan pero confunden al humano. Evitá
nombres de más de 50 caracteres.
Mayúsculas en el ticket
Los IDs de ticket suelen ir en mayúsculas (PROJ-123). El resto del slug en
minúsculas. Esto da un nombre visualmente distinguible:
feature/PROJ-123-add-login. Si tu sistema no diferencia mayúsculas (Windows
con default settings), todo en minúsculas también funciona.
Branch policies
En GitHub o GitLab podés enforzar la convención con branch protection y acciones que
validen el nombre antes de aceptar pushes. Una regex como
^(feature|fix|hotfix|chore)\/[A-Z]{2,}-\d+-[a-z0-9-]+$ bloquea pushes que
no sigan el patrón.
Borrar ramas mergeadas
Configurá auto-delete tras merge en GitHub Settings. git fetch --prune
elimina referencias a ramas remotas borradas. Sin esto, el repo termina con cientos de
ramas zombi y los autocompletes fallan.