Git pull VS git fetch git rebase

Другой вопрос сказал, что git pull похож на git fetch + git merge.

Но в чем разница между git pull VS git fetch + git rebase?

Ответ 1

Из вашего вопроса должно быть довольно очевидно, что вы просто спрашиваете о различии между 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). Вы никогда не должны использовать метод переадресации, если кто-то еще вытащил из вашей основной ветки.

Наконец, обратите внимание, что вы можете настроить git pull для данной ветки для использования rebase вместо merge, установив параметр конфигурации branch.<name>.rebase в true. Вы также можете сделать это одним нажатием, используя git pull --rebase.

Ответ 2

TL;DR:

git pull это как запуск git fetch затем git merge
git pull --rebase это как git fetch затем git rebase

В ответ на ваше первое выражение,

git pull - это как git fetch + git merge.

"В режиме по умолчанию git pull является сокращением для git fetch за которым следует git merge FETCH_HEAD" Точнее, git pull запускает git fetch с заданными параметрами и затем вызывает git merge для слияния найденных голов веток в текущую ветку "

(Ссылка: https://git-scm.com/docs/git-pull)


Для вашего второго утверждения/вопроса:

"Но в чем разница между git pull git fetch + git rebase "

Опять же из того же источника:
git pull --rebase

"С --rebase он запускает git rebase вместо git merge".


Теперь, если вы хотели спросить

"разница между merge и rebase "

здесь тоже есть ответ:
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
(разница между изменением способа записи истории версий)