>_ IzzyLab

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

Пересадка коммитов через rebase --onto

сложно

В репозитории /root/repo есть ветка main (коммиты base, m1, m2) и ветка topic, которая ответвилась от main ещё до m2 и содержит три своих коммита: t1, t2, t3 (каждый добавляет одноимённый файл t1.txt, t2.txt, t3.txt).

Нужно перенести на вершину main только два последних коммита topict2 и t3, полностью отбросив коммит t1. После операции ветка topic должна стоять поверх main (содержать m2.txt, t2.txt, t3.txt), а файла t1.txt в ней быть не должно.

Что потренируешь:
  • git rebase --onto
  • пересадка коммитов
  • относительные ссылки
  • topic~N
  • точка ветвления

Разбор темы

Обычный git rebase переносит на новое основание всю серию коммитов от точки ветвления. Форма git rebase --onto разрывает эту жёсткую связку и позволяет пересадить только хвост ветки, отбросив её нижние коммиты. Она принимает три ориентира — новое основание, верхнюю границу отбрасываемого куска и саму двигаемую ветку; границу удобно задавать относительной ссылкой вида <ветка>~N.

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

  1. topic пересажен на main
  2. коммит t1 отброшен
  3. коммит t2 перенесён
  4. коммит t3 перенесён

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