#какэтоработает #средаразработки
Всем привет! Сегодня продолжим разговор о git, а точнее о двух способах объединения изменений, и посмотрим, для каких ситуаций подходит каждый из них.
git merge VS git rebase
Что делают эти команды?
Git merge объединяет ветки и создаёт отдельный коммит слияния, сохраняя временну́ю последовательность коммитов. Git rebase делает историю линейной, но меняет при этом хэши (уникальные идентификаторы) коммитов.
Почему смена хэша — это плохо
Коммиты — это “записи”, по которым можно восстанавливать историю или отменять изменения, передвигаясь по ним назад. Rebase переписывает хэши коммитов, чем может сломать историю у других участников процесса.
Чем плох merge?
Если есть изменения, merge добавляет новый коммит с двумя родителями — коммит слияния. Более того, при слиянии сохраняется ветвление, и поэтому сложно визуально определить, какой коммит в одной ветке был сделан раньше, чем коммит в другой.
Когда какой путь выбрать?
Merge или rebase — это выбор между полной историей и визуально чистой историей. Rebase можно использовать, чтобы обновить ветку перед слиянием с основной, сохраняя линейную историю. Merge лучше использовать, если ветка общая и в ней работают несколько разработчиков.
❗️Главное правило: не переписывайте историю, которую уже кто-то мог забрать.
Вопрос к мидлам и сеньорам: а вы используете rebase или обходитесь merge?
Всем привет! Сегодня продолжим разговор о git, а точнее о двух способах объединения изменений, и посмотрим, для каких ситуаций подходит каждый из них.
git merge VS git rebase
Что делают эти команды?
Git merge объединяет ветки и создаёт отдельный коммит слияния, сохраняя временну́ю последовательность коммитов. Git rebase делает историю линейной, но меняет при этом хэши (уникальные идентификаторы) коммитов.
Рассмотрим, как работает rebase из feature в main. Представим, что до объединения в ветках есть коммиты:
feature: A — B — C (коммит 1 июня)
main: A — B — D (коммит 2 июня)
Что получается после rebase:
feature: A — B — C
main: A — B — C — D' (D' — новый хэш)
Почему смена хэша — это плохо
Коммиты — это “записи”, по которым можно восстанавливать историю или отменять изменения, передвигаясь по ним назад. Rebase переписывает хэши коммитов, чем может сломать историю у других участников процесса.
Чем плох merge?
Если есть изменения, merge добавляет новый коммит с двумя родителями — коммит слияния. Более того, при слиянии сохраняется ветвление, и поэтому сложно визуально определить, какой коммит в одной ветке был сделан раньше, чем коммит в другой.
Что происходит при merge из feature в main?
main: A (коммит, от которого создана ветка) — B — C (коммит 1 июня)
feature: A — E — D (коммит 2 июня)
Что получается после merge в ветке main:
main: A — B — C — F (коммит
\ E — D / слияния)
Когда какой путь выбрать?
Merge или rebase — это выбор между полной историей и визуально чистой историей. Rebase можно использовать, чтобы обновить ветку перед слиянием с основной, сохраняя линейную историю. Merge лучше использовать, если ветка общая и в ней работают несколько разработчиков.
❗️Главное правило: не переписывайте историю, которую уже кто-то мог забрать.
Вопрос к мидлам и сеньорам: а вы используете rebase или обходитесь merge?