Есть ли разница между 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
в приведенном выше примере).