>_ IzzyLab

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

Выкинь лишний коммит через rebase

сложно

В /root/repo четыре коммита, каждый добавил свой файл: a.txt, secret.txt, c.txt, d.txt. Коммит, добавивший secret.txt, попал в историю по ошибке. Убери этот коммит целиком из истории ветки main (не просто удали файл в новом коммите — его не должно остаться и в прошлом), сохранив остальные три коммита и их файлы. В итоге в истории должно остаться три коммита, а secret.txt не должен встречаться ни в одной ревизии.

Что потренируешь:
  • git rebase -i
  • переписывание истории
  • drop коммита
  • GIT_SEQUENCE_EDITOR
  • --root

Разбор темы

История git не высечена в камне: интерактивная перебазировка переигрывает цепочку коммитов по списку-сценарию, где каждая строка — один коммит с действием (pick, drop и т.д.). Чтобы коммит исчез из истории целиком (а не просто удалить файл новым коммитом сверху), его строку убирают из сценария. Флаг для перебазировки от самого корня позволяет захватить и первый коммит, а неинтерактивно сценарий редактируют, подсунув свой редактор через переменную окружения.

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

  1. secret.txt удалён из дерева
  2. secret.txt нет ни в одном коммите
  3. три коммита
  4. остальные файлы на месте

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