Подтвердить что ты не робот

Git rebase upstream/master vs git pull --rebase upstream master

Есть ли разница между git rebase upstream/master и git pull --rebase upstream master, и если да, то что? Пульт дистанционного управления может быть любым удаленным, не обязательно вверх по течению.

4b9b3361

Ответ 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 в приведенном выше примере).