#git-atomic-commit
Что значит «atomic commit» и зачем это важно в команде?
Что отвечать
Atomic commit - один коммит = одно логически законченное изменение, которое можно описать одним предложением и которое **компилируется и проходит тесты само по себе**. Не «WIP», не «fix typo + add feature + reformat». Зачем: `git bisect` работает только если каждый коммит собирается; revert одного логического изменения становится одной командой; review понимает «что именно сделал этот коммит».
Что хотят услышать
Senior должен: - назвать три критерия: одно изменение, описывается одной фразой, собирается+проходит тесты на своём моменте - объяснить связь с bisect: если коммиты «сборные» - бизект найдёт коммит, но не поймёт что внутри него виновато - сказать что atomic не значит «маленький»: коммит на 500 строк может быть атомарным (миграция БД целиком), а на 5 строк - нет (fix typo + add unused import) - назвать инструменты дисциплины: `git add -p` для добавления кусками, `git commit --fixup=<sha>` для прицельной правки, interactive rebase для разбиения большого коммита на части - упомянуть что в командах с squash-merge атомарность теряется на main, но всё ещё важна для review до merge
Подводные камни
- ✗ Сказать «atomic это маленький коммит» - размер не критерий, критерий это «одно логическое изменение»
- ✗ Делать коммит «refactor + new feature» - revert потом потребует переписывать руками
- ✗ Скипать `git add -p` ради скорости и засовывать в один коммит правки нескольких несвязанных файлов
Follow-up
- ? Как разбить большой коммит на серию атомарных через interactive rebase?
- ? Чем `git add -p` помогает делать атомарные коммиты?
- ? Что произойдёт с `git bisect` на репозитории с broken-коммитами?
Глубина в базе знаний