Чем merge отличается от rebase и почему нельзя переписывать опубликованную историю?
- Когда использовать 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 пересоздаёт коммиты с новыми хешами
Разбор темы
- Git — ветки, коммиты и отмена изменений
Как работать в ветке от первого коммита до push, чем merge отличается от rebase, как отменять изменения и разрешать конфликты.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.