¿Qué es un commit atómico?
Un commit atómico captura exactamente un cambio lógico. Compila, pasa sus propios tests, y puede ser revertido aisladamente sin romper nada más.
El test del olfato
Si te encuentras escribiendo un mensaje con la palabra "y" — "Añadir login y arreglar typo y refactorizar helper" — estás viendo tres commits atascados en uno.
Staging selectivo con git add -p
git add -p src/checkout.js
# y - stagear este hunk
# n - saltar este hunk
# s - dividir en hunks más pequeños
# e - editar manualmente el hunk
Un ejemplo trabajado
git add src/checkout.js
git commit -m "Fix off-by-one in cart total calculation"
git add tests/checkout.test.js
git commit -m "Add regression test for cart total bug"
git add README.md
git commit -m "Fix typo in installation section"
Dividir commits que ya hiciste
git rebase -i HEAD~3
# Marcar el commit desordenado como 'edit'
git reset HEAD^
git add -p
git commit -m "Primera pieza atómica"
git add -p
git commit -m "Segunda pieza atómica"
git rebase --continue
Mantener tests con su código
Una pregunta debatida a menudo: ¿debería el test de un feature vivir en el mismo commit que el feature, o en uno separado? La respuesta pragmática es "mismo commit".
Commits atómicos y bisect
git bisect start
git bisect bad HEAD
git bisect good v2.4.0