Я начал использовать git некоторое время назад и не до конца понимаю все сложности. Мой основной вопрос здесь состоит в том, чтобы выяснить разницу между a git pull
и git pull --rebase
, так как добавление --rebase
опции, кажется, не делает что-то совсем другое: просто делает тягу.
Пожалуйста, помогите мне понять разницу.
Ответы:
git pull
=git fetch
+git merge
против отслеживания восходящей веткиgit pull --rebase
=git fetch
+git rebase
против отслеживания восходящей веткиЕсли вы хотите знать, как
git merge
и чемgit rebase
отличаются, прочитайте это .источник
git pull --rebase
такая же, какgit fetch
иgit rebase
есть, в основном так, как она есть, но она не совсем семантически эквивалентна. Есть некоторые различия, некоторые из которых объяснены здесь. gitolite.com/git-pull--rebasefetch
?Ответ взят (и немного изменен):
http://gitolite.com/git-pull--rebase
источник
a---b+c---d+e---f---p'---q'---r' (foo)
так как rebase изменяет хэши.A
, и я отправил пиар в репозиторий, который был принят. Затем, когда я сделалgit pull --rebase
против вышестоящего репо, я не получил новыйA'
коммит поверх вытянутого вышестоящего репо. На самом деле неA'
существует вообще. Это потому, чтоA
был слит в систему? Или это потому, что не было никакой разницы между апстримом и моей перебазированной версией?git pull --rebase
. Но одна вещь, которая сбивает меня с толку в этой гипотетической ситуации, заключается в том, что ведущий разработчик изменил историю проекта, которая уже была добавлена в репозитории локального разработчика. Разве это не просто плохая практика в целом? Если он хотел раздавить историю коммитов / переписать, это нужно было сделать до того, как интегрировать ее в центральное хранилище, чтобы избежать конфликтов такого типа.Предположим, у вас есть два коммита в локальной ветке:
После «git pull» будет:
После "git pull --rebase" точка слияния G. не будет. Обратите внимание, что D и E становятся разными коммитами:
источник
git rebase
делает? Но мы говорим оgit pull --rebase
. И это разные вещи.В самом простом случае без столкновений
Смотрите также:
man git-pull
Смотрите также:
Когда я должен использовать git pull --rebase?
http://git-scm.com/book/en/Git-Branching-Rebasing
источник
git sdd modified-file; git rebase --continue
или объединить:git add modified-file; git commit;
гдеmodified-file
находится локальный файл, который вы изменили вручную / mergetoolfetch
? Почему они создали дваrebase
потока? 1)git rebase
и 2)git pull --rebase
?Для этого важно понять разницу между Merge и Rebase.
За подробностями обращайтесь - http://www.derekgourlay.com/archives/428
источник