Какие флаги можно использовать с командой git commit
Что проверяют
Работали ли вы с Git руками или только нажимали кнопку в IDE. Сами флаги интересуют меньше, чем понимание, что каждый делает с историей. Следом почти всегда спрашивают про --amend: можно ли так поправить коммит, который уже лежит в удалённой ветке.
Как отвечать
Назовите флаги, которыми пользуетесь, и сразу скажите, в какой ситуации:
-m: сообщение прямо в команде. Можно передать несколько раз, каждое-mстанет отдельным абзацем, так удобно отделить заголовок от тела;-a: перед коммитом индексирует изменения и удаления в уже отслеживаемых файлах. Новые файлы не попадут, их всё равно добавляют черезgit add;--amend: заменяет последний коммит новым, с другим хэшем. В паре с--no-editсохраняет старое сообщение, так дописывают забытый файл;-p(--patch): интерактивно выбрать куски изменений, которые войдут в коммит;-v: показывает дифф в редакторе под шаблоном сообщения;-s(--signoff): дописывает строкуSigned-off-by, этого требуют некоторые open source проекты;-S(--gpg-sign): криптографическая подпись коммита ключом GPG или SSH, на хостингах такие коммиты помечаются как проверенные;-n(--no-verify): пропускает хукиpre-commitиcommit-msg;--fixup=<коммит>: коммит-поправка, который потом склеится с нужным черезgit rebase -i --autosquash;--allow-empty: пустой коммит, например чтобы перезапустить CI.
Для фронтенда уместно связать это с практикой команды: Husky и lint-staged гоняют ESLint и Prettier на изменённых файлах в хуке pre-commit, а commitlint проверяет формат Conventional Commits.
Где спотыкаются
Путают -s и -S. Первый только дописывает строку в текст сообщения, второй действительно подписывает коммит ключом.
Считают, что -a добавляет всё подряд. Новый компонент, который ещё ни разу не индексировался, в такой коммит не попадёт, и сборка у коллег упадёт на отсутствующем импорте.
Делают --amend после пуша в общую ветку, а потом push --force. История у коллег расходится. Если переписывать, то только в своей ветке и через --force-with-lease.