Git Merge vs. Rebase vs. Squash Commit

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
10,005
Реакции
1,564
Credits
35,673
photo_2024-09-26_11-33-16.jpg
Git Merge vs. Rebase vs. Squash Commit

В чем разница?

Когда мы объединяем изменения из одной ветки Git в другую, мы можем использовать «git merge» или «git rebase». Диаграмма ниже показывает, как работают эти две команды.

Git Merge
Эта команда создает новый коммит G’ в основной ветке. G’ связывает историю обеих веток: основной и функциональной.

Git merge — это недеструктивная операция. Она добавляет новый коммит в основную ветку, не изменяя существующие коммиты в обеих ветках.

Git Rebase
Git rebase переносит историю коммитов функциональной ветки на конец основной ветки. Он создает новые коммиты E’, F’ и G’ для каждого коммита в функциональной ветке.

Преимущество rebase в том, что он создает линейную историю коммитов.

Однако будьте осторожны: следуйте золотому правилу Git Rebase — никогда не используйте его на общих ветках, чтобы избежать путаницы среди ваших коллег.

Git Squash Commit
Сквошинг сжимает несколько коммитов в один, упрощая историю коммитов.
 

GuDron

dumpz.ws
Admin
Регистрация
28 Янв 2020
Сообщения
10,005
Реакции
1,564
Credits
35,673
Git Merge vs Rebase
photo_2025-07-28_13-29-56.jpg
Одной из самых мощных возможностей Git является работа с ветками.
Однако при работе с ними нам нужно интегрировать изменения из одной ветки в другую, и способов сделать это несколько.
Есть два основных метода:

1. Merge (слияние)
Когда вы сливаете ветку A в ветку B (с помощью git merge), Git создаёт новый merge-коммит.
У этого коммита два родителя — по одному от каждой ветки, что символизирует объединение их истории.
- Это неразрушающая операция, которая сохраняет точную историю проекта.
- Merge особенно полезен в командной работе, когда важно сохранить целостность и хронологию изменений.
Минус: merge-коммиты могут "засорять" историю, усложняя отслеживание конкретных изменений.

2. Rebase (перебазирование)
Когда вы перебазируете ветку A на ветку B (с помощью git rebase), это означает:
"Давайте сделаем вид, что изменения из ветки A были сделаны поверх последних изменений ветки B."
- Rebase переписывает историю проекта, создавая новые коммиты для каждого из исходных коммитов.
- Результат — чистая, линейная история.
Минус: может быть проблематично, если над веткой работают несколько человек, ведь перебазирование переписывает историю, что усложняет совместную работу при уже опубликованных ветках.

Когда что использовать?
- Merge — когда важно сохранить полную историю и вы работаете с общими ветками. Идеально для слияния feature-веток в main или develop.
- Rebase — для личных веток или когда нужна чистая, линейная история для удобства отслеживания изменений.

Важно: не делайте rebase публичной истории. Если ветка уже опубликована и с ней работают другие, переписывание истории приведёт к конфликтам и путанице.