Есть ли разница между git rebase upstream/master и git pull --rebase upstream master, и если да, то что? Пульт дистанционного управления может быть любым удаленным, не обязательно вверх по течению.
Git rebase upstream/master vs git pull --rebase upstream master
Ответ 1
git pull --rebase будет fetch (git fetch) сначала, обновление upstream/master совершает.
Если вы просто переадресовываете без первого обновления upstream/master, вы не получите тот же результат.
Я проиллюстрирую его в разделе master и 'origin/master' расходятся, как "разделить" ветки "?"
SnakE упоминает в комментариях, что git pull --rebase не точно git fetch && git rebase origin/master.
См. " что делает" git pull --rebase "do?"
(origin/master)
|
A--B--C (master)
\
B'--D (actual origin/master after changing B and force pushing)
Что git pull --rebase делает в этом случае:
git fetch origin
git rebase --onto origin/master B master
Здесь:
- origin/master - это новый обновленный
origin/master(B') -
B- это старыйorigin/master(до его обновления) -
master- это ветвь для воспроизведения поверхorigin/master
Это отличается от git fetch + git rebase origin/master тем, что команда pull --rebase пытается выяснить, какие коммиты действительно являются вашими локальными и которые произошли из предыдущего потока в предыдущей выборке.
Чтобы сделать это, он смотрит на блок журнала удаленной отслеживания (
origin/master, в данном случае). Этот reflog представляет подсказки для последовательных операцийgit fetchнаoriginв порядке "последнего первого".Для каждой записи reflog (
origin/[email protected]{1}, затем...{2}и т.д.) он проверяет, является ли это фиксация предком текущей ветки веткиmaster. Как только он находит один, он выбирает его как отправную точку для rebase (Bв приведенном выше примере).