>_ IzzyLab

Практическое задание

Схлопни fixup-коммит через autosquash

сложно

В /root/repo (ветка main) три коммита: base, add config (создаёт config.txt со строкой value=1) и add readme. В конфиге ошибка — должно быть value=2.

Исправь это правильным способом: сделай отдельный коммит-исправление, помеченный как fixup! для коммита add config (в нём config.txt = value=2), а затем неинтерактивно схлопни его в целевой коммит через autosquash-ребейз. В итоге история должна снова состоять из трёх коммитов (base, add config, add readme), без отдельного fixup!-коммита, а изменение value=2 должно оказаться внутри коммита add config.

Ребейз запускай без ручного редактора: подставь GIT_SEQUENCE_EDITOR=true, чтобы автоматически принять сгенерированный список действий.

Что потренируешь:
  • git commit --fixup
  • autosquash
  • git rebase -i
  • GIT_SEQUENCE_EDITOR
  • переписывание истории

Разбор темы

Autosquash — это конвейер из двух шагов: сначала правку оформляют специальным коммитом, чьё сообщение начинается с fixup! <заголовок цели>, а затем интерактивный ребейз с флагом --autosquash сам ставит его рядом с целевым коммитом и вливает внутрь, не оставляя следа. Fixup-коммит удобно делать через git commit --fixup <цель>. Чтобы ребейз прошёл неинтерактивно, редактор списка действий подменяют, выставив GIT_SEQUENCE_EDITOR=true, — git примет сгенерированный план как есть.

Что проверяется

  1. в истории ровно три коммита
  2. отдельного fixup-коммита нет
  3. исправление внутри коммита add config

Как это выглядит