2 ответов:
это должно быть довольно очевидно из вашего вопроса, Что вы просто спрашиваете о разнице между
git mergeиgit rebase.Итак, предположим, что вы находитесь в общем случае - вы сделали некоторую работу над своей главной ветвью, и вы тянете из origin, который также сделал некоторую работу. После выборки все выглядит так:
- 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)содержание вашего дерева работ должно быть одинаковым в обоих случаях; вы только что создали другую историю, ведущую к нему. Rebase переписывает вашу историю, делая ее похожей на то, что вы совершили поверх новой главной ветви origin (
R), вместо того, где вы первоначально совершили (H). Вы никогда не должны использовать rebase подход, если кто-то уже вытащил из ветки master.наконец, обратите внимание, что вы можете настроить
git pullдля данной ветви использовать rebase вместо слияния, установив параметр конфигурацииbranch.<name>.rebaseзначение true. Вы также можете сделать это за один раз, используяgit pull --rebase.
в ответ на ваше первое заявление ' git pull-это как git fetch + git merge.',
" в своем режиме по умолчанию git pull является сокращением для git fetch, за которым следует git merge FETCH_HEAD " точнее, git pull запускает git fetch с помощью заданные параметры и вызовы git merge для объединения полученной ветви головы в текущую ветку"
(Ref:https://git-scm.com/docs/git-pull)
Для вашего второе утверждение / вопрос: 'но в чем разница между git pull VS git fetch + git rebase' Опять же, из того же источника:" с --rebase, он запускает git rebase вместо git merge."
Теперь, если вы хотите спросить разницу между fetch и merge, это тоже ответ здесь: https://git-scm.com/book/en/v2/Git-Branching-Rebasing (разница между изменением способа записи истории версий а чего нет)
Comments