git pull VS git fetch git rebase
Другой вопрос сказал git pull
это как git fetch
+ git merge
,
Но в чем разница между git pull
В.С. git fetch
+ git rebase
?
2 ответа
Из вашего вопроса должно быть совершенно очевидно, что вы на самом деле просто спрашиваете о разнице между 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
к истине. Вы также можете сделать это за одно нажатие, используя git pull --rebase
,
В ответ на Ваше первое заявление "мерзавца тянуть это как мерзавец принести + GIT слияния. ",
"В режиме по умолчанию, мерзавец зычок стенографии для мерзавца выборки с последующим мерзавцем слиянием FETCH_HEAD" Точнее, мерзавец тянуть работает мерзавец выборку с заданными параметрами и вызывает GIT слияние, чтобы объединить извлекаемые ветви головы в текущую ветвь"
(Ссылка: https://git-scm.com/docs/git-pull)
Для вашего второго заявления / вопрос: "А в чем разница между мерзавца тянуть VS мерзавца принести + GIT перебазироваться" Опять же, из того же источника:
"С помощью --rebase он запускает git rebase вместо git merge".
Теперь, если вы хотите, чтобы спросить разницу между выборкой и слиянием, что отвечает здесь: https://git-scm.com/book/en/v2/Git-Branching-Rebasing (разница между изменением путем истории версий записывается и то, что нет)