Из вашего вопроса должно быть совершенно очевидно, что вы на самом деле просто спрашиваете о разнице между git merge
и git rebase
.
Итак, давайте предположим, что вы находитесь в общем случае - вы проделали некоторую работу над своей основной веткой и извлекли ее из источника, который также проделал некоторую работу. После загрузки все выглядит так:
- o - o - o - H - A - B - C (master)
\
P - Q - R (origin/master)
Если вы объединяетесь в этот момент (стандартное поведение git pull), предполагая, что нет никаких конфликтов, вы получите следующее:
- o - o - o - H - A - B - C - X (master)
\ /
P - Q - R --- (origin/master)
Если, с другой стороны, вы сделали соответствующую перебазировку, вы бы получили:
- o - o - o - H - P - Q - R - A' - B' - C' (master)
|
(origin/master)
Содержимое вашего рабочего дерева должно быть одинаковым в обоих случаях; Вы только что создали другую историю, ведущую к ней . Перебазирование переписывает вашу историю, создавая впечатление, что вы зафиксировали ее поверх новой главной ветки источника (R
) вместо того, где вы изначально зафиксировали (H
). Вы никогда не должны использовать подход rebase, если кто-то уже извлек из вашей основной ветки.
Наконец, обратите внимание, что вы можете настроить git pull
для данной ветви на использование rebase вместо слияния, установив для параметра конфигурации branch.<name>.rebase
значение true. Вы также можете сделать это для одного нажатия, используя git pull --rebase
.