Decidir cúando se debe hacer commits es un skill que se aprende con la experiencia.
Un commit debe tener sentido por si mismo, no debe presentar fallos de pruebas al compilar y debe aportar algún valor a la base de código.
Un commit debe recoger cambios que tengan relación. Por ejemplo, corregir dos bugs diferentes se debe reflejar en dos commits diferentes.
Crear Commits grandes o excesivamente pequeños dificultad que otros desarrolladores comprendan los cambios y los reviertan.
Hay que encontrar un enquilibrio también en la frecuencia:
- Más dificiles de revisar porque todos los cambios se agrupan
- Ensucia el historial de código fuente
- Retrasa que otros compañeros vean tu trabajo y se beneficien de él
Único commit:
- Refactoring, reformatting and add navbar
- Crea una historia confusa con commits con poco sentido.
- Problemas al revertir cambios o encontrar el commit exacto donde empieza un cambio.
#### Ejemplo mucha frecuencia
- refactor: component app
- refactor: component header
- style: formatting components
- style: more formatting components
- feat: import navbar from bootstrap
- feat: add navbar
- feat: setting navbar
- Deja un historial limpio
- Los commits son fáciles de revisar
- Otros desarrolladores pueden beneficiarse. Por ejemplo de la refactorización que hayas hecho antes de añadir la feature.
- Es facil revertir a un cambio que pueda necesitar. Por ejemplo al punto donde un código se refactorizó y se formateó, antes de empezar a agregar el navbar.
- Los tres commits no deberían romper pruebas de código existentes
- refactor: current header
- style formatting header
- feat: add navbar to header
## No crear commits con cambios incompletos
Crear commits solo cuando se complete un componente lógico.
Dividir la implementación de bloques funcionales en partes lógicas permite que se puedan completar y grabar sus commits con frecuencia.
Si tienes necesidad de crear un commit solo para guardar una copia de los cambios usa la función stash de git.
Pruébelo a fondo para asegurarse de que realmente esté completo y no tenga efectos secundarios para los que se actualicen los cambios.
{type}: {subject}
- No más de 60 caracteres
- Describir de forma breve, precisa y concisa el cambio añadido. Evitar palabras de relleno.
- Expresado en imperativo
- fix: bug on navbar (good)
- fixed bug on navbar (bad)
- Primera letra en minúscula
- No finalizar en punto '.' ni usar otros signos de puntuación
- feat -> nuevas features
- fix -> corregir errores
- docs -> documentación
- style -> actualizar o limpiar estilo del código
- refactor -> Restructurar código sin cambiar su comportamiento
- test -> Añadir tests
- chore -> Tareas de mantenimiento
- init -> initial commit
- rearrange -> Reorganizar, mover, eliminar archivos, etc.
- update -> Actualizar código, versiones y librerias compatibles.