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