Иногда у нас есть восходящий поток, который переустанавливает/перематывает ветку, на которую мы зависим. Это может быть большой проблемой - вызывать беспорядочные конфликты для нас, если мы отстаем.
Магия git pull --rebase
Нормальный мерзавец тянуть, грубо говоря, что-то вроде этого (мы будем использовать пульт под названием происхождение и филиал под названием Foo во всех этих примерах):
# assume current checked out branch is "foo"
git fetch origin
git merge origin/foo
На первый взгляд, можно подумать, что мерзавец тянуть --rebase делает именно это:
git fetch origin
git rebase origin/foo
Но это не поможет, если вышестоящий перебазироваться участие любой «squashin g "(это означает, что патч-идентификаторы коммитов изменились, а не только их порядок).
Это означает, что git pull --rebase должен сделать немного больше. Вот объяснение того, что он делает и как.
Допустим, ваша отправная точка это:
a---b---c---d---e (origin/foo) (also your local "foo")
Время проходит, и вы сделали несколько коммитов на вершине собственного «Foo»:
a---b---c---d---e---p---q---r (foo)
Между тем, в приступе антисоциальная ярость, поддерживающий восходящий поток не только усугубил свой «фу», он даже использовал сквош или два. Его цепочка фиксации теперь выглядит примерно так:
a---b+c---d+e---f (origin/foo)
Погиб в этом месте приведет к хаосу. Даже git fetch; git rebase origin/foo не сократил бы его, потому что коммиты «b» и «c» с одной стороны и совершить «b + c» с другой, будут конфликтовать. (И аналогично d, e и d + e).
Что git pull --rebase
делает, в этом случае является:
git fetch origin
git rebase --onto origin/foo e foo
Это дает:
Связанный: [Когда следует использовать git pull --rebase?] (Http://stackoverflow.com/q/2472254/456814). –
Возможный дубликат [git pull VS git fetch git rebase] (http://stackoverflow.com/questions/3357122/git-pull-vs-git-fetch-git-rebase) –
Полезная ссылка: https: // www. atlassian.com/git/tutorials/rewriting-history/git-rebase –