Вопрос с собеседования · DevOps

Чем merge отличается от rebase и почему нельзя переписывать опубликованную историю?

JuniorCI/CD и Git
Ещё спрашивают так:
  • Когда использовать git rebase?
  • Что такое force push и чем он опасен?
Коротко

merge соединяет две ветки коммитом слияния, сохраняя историю как была. rebase переносит коммиты ветки поверх другой, создавая новые коммиты с другими хешами — история становится линейной. Поскольку rebase переписывает коммиты, его делают только с локальными или личными ветками: переписать уже опубликованную общую ветку — значит сломать работу коллег, у которых старые коммиты.

  • Обновить свою ветку от main: git rebase main (до публикации) или git merge main
  • После rebase опубликованной личной ветки нужен git push --force-with-lease
  • --force-with-lease безопаснее --force: не затрёт чужие новые коммиты

А ещё Squash merge в pull request — один коммит в main на задачу

Подробно

merge:

main:    A---B---C-------M
          \             /
feature:   D---E-------

rebase feature на main:

main:    A---B---C
                  \
feature:           D'---E'

D' и E' — новые коммиты. Если кто-то уже взял старые D и E, у него будут дубли и конфликты.

Правило: main и общие ветки никогда не переписывают (запрет force push в настройках репозитория).

Что хотят услышать

  • merge сохраняет историю, rebase переписывает.
  • Rebase только для неопубликованного или личного.
  • force-with-lease.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Force push в main — нормальный способ исправить историю
  • ✗merge удаляет коммиты исходной ветки
  • ✗rebase сохраняет хеши коммитов, поэтому безопасен для общих веток, в отличие от merge
  • ✓merge создаёт коммит слияния, rebase пересоздаёт коммиты с новыми хешами

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования