Другой вопрос сказан git pull
похож на a git fetch
+ git merge
.
Но каково различие между git pull
VS git fetch
+ git rebase
?
Из вашего вопроса должно быть довольно очевидно, что вы на самом деле просто спрашиваете о разнице между 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)
Содержимое вашего рабочего дерева должно быть одинаковым в обоих случаях; вы только что создали другую предысторию . Перебазирование перезаписывает вашу историю, создавая впечатление, что вы совершили фиксацию поверх новой главной ветки origin ( R
), вместо того, где вы первоначально зафиксировали ( H
). Вы никогда не должны использовать подход rebase, если кто-то уже извлек из вашей основной ветки.
Наконец, обратите внимание, что вы можете настроить git pull
для данной ветви на использование перебазирования вместо слияния, установив для параметра конфигурации branch.
значение true . Вы также можете сделать это за один проход, используя git pull --rebase
.