Qu'est-ce qu'un commit atomique ?
Un commit atomique capture exactement un changement logique. Il compile, passe ses propres tests, et peut être reverté isolément sans rien casser d'autre.
Le test de l'odeur
Si vous vous trouvez à écrire un message de commit avec le mot "et" — "Add login and fix typo and refactor helper" — vous regardez trois commits coincés en un.
Staging sélectif avec git add -p
git add -p src/checkout.js
# y - stage ce hunk
# n - sauter ce hunk
# s - diviser en hunks plus petits
# e - éditer manuellement le hunk
Un exemple travaillé
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"
Diviser des commits déjà faits
git rebase -i HEAD~3
git reset HEAD^
git add -p
git commit -m "Première pièce atomique"
git add -p
git commit -m "Seconde pièce atomique"
git rebase --continue
Garder les tests avec leur code
Une question souvent débattue : le test d'une feature doit-il vivre dans le même commit que la feature ? La réponse pragmatique est "même commit".
Commits atomiques et bisect
git bisect start
git bisect bad HEAD
git bisect good v2.4.0