Другой вопрос сказал 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)
Содержимое вашего рабочего дерева должно быть одинаковым в обоих случаях; Вы только что создали другую историю, ведущую к этому . Перебазирование переписывает вашу историю, создавая впечатление, что вы зафиксировали поверх новой главной ветки origin ( R
), а не там, где вы изначально фиксировали ( H
). Вы никогда не должны использовать подход rebase, если кто-то уже извлек из вашей основной ветки.
Наконец, обратите внимание, что вы можете настроить git pull
для данной ветви использование rebase вместо слияния, установив для параметра config 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
VS git fetch
+ git rebase
»
Опять же из того же источника:
git pull --rebase
«С помощью --rebase он запускает git rebase вместо git merge».
'разница между merge
и rebase
»
здесь тоже есть ответ:
https://git-scm.com/book/en/v2/Git-Branching-Rebasing
(разница между изменением способа записи истории версий)
git fetch + git rebase
команды теперь работают. На нашем