Я изо всех сил пытался понять разницу между командой git rebase
и командой git merge
, почему и когда какую команду использовать, после прочтения некоторых статей и ответов о переполнении стека, вот что я нашел.
Git слияние
Git merge добавляет или интегрирует ваши обновленные изменения из веток функций в базовую ветку. Например, мы создаем проект, в котором есть базовая ветвь с именем master
и следующие ветки функций: add
, multiply
, divide
, substract
с разными разработчиками, работающими в каждой из этих ветвей.
Теперь мы работаем над операцией умножения, поэтому мы git checkout multiply
добавляем наши коммиты.
Недавняя фиксация в multiply
— это добавление функции умножения, мы закончили с этой веткой, мы протестировали эту функцию, и ее можно добавить в базовую (master
) ветку.
Чтобы локально добавить изменения из multiply
в master
, мы используем команду merge. Во-первых, давайте checkout
в master
и просмотрим последние коммиты.
Недавняя фиксация в master
— это добавленная функция более высокого порядка в 09:39. Преобразуем git merge multiply
в master
(Примечание: чтобы объединить ветку функций с базовой веткой, перед слиянием необходимо выполнить проверку в базовой ветке).
Теперь в нашей ветке master
все коммиты множатся.
Git перебазировать
Мы используем git rebase
для добавления изменений базовой ветки в ветку функций. Итак, мы объединили изменения с multiply
на master
. Тем временем другая команда работала над divide
, они выполнили операцию разделения и зафиксировали свои изменения.
Обратите внимание, divide
не в курсе, что мастер обновлен, и для предотвращения конфликтов слияния мы обновляем ветку. Для этого мы используем git rebase
, rebase просматривает историю коммитов master
и размещаем коммиты в хронологическом порядке.
После переустановки журнал ветки divide
обновляется последними обновлениями в master
.
Мы также могли бы использовать git merge
, но это противоречит рекомендациям, поскольку создает дополнительную коммит слияния, и могут возникнуть проблемы с визуализацией истории git.
Краткое содержание
Мы используем git merge
для обновления изменений из feature
ветки в base
ветвь, и мы используем git rebase
для добавления изменений из base
в feature
. Спасибо.