Ответ 1
извлечение, слияние и растяжка
git fetch
и git merge origin/master
будут извлекать и интегрировать удаленные изменения. Позвольте мне объяснить общий сценарий. origin/master находится на C. Кто-то нажал D. Вы работали над E и F. Обратите внимание, что вы не увидите D в своем локальном репозитории, пока не запустите git fetch
.
origin/master
v
A-B-C-E-F < master
\
(D) < master on remote
Теперь вы запустите git fetch
. Теперь вы можете видеть D, а origin/master обновляется в соответствии с удаленным репозиторием, который он отслеживает.
A-B-C-E-F < master
\
D < origin/master, master on remote
Теперь вы запустите git merge
, предоставив вам следующее:
A-B-C-E-F
\ \
D---G < master
^
origin/master, master on remote
Итак, теперь вы интегрировали свои изменения в master (E, F) с новыми коммитами на origin/master (D).
git pull
является просто ярлыком для вышеуказанных шагов.
git слияние без выборки
Выполнение git merge origin/master
без git fetch
бессмысленно. Без git fetch
ваш локальный репозиторий не знает о каких-либо потенциальных изменениях в удаленном репозитории, а исходный/мастер не будет перемещен. Таким образом, вы находитесь в этом состоянии, где D находится только на пульте дистанционного управления и не отображается локально:
origin/master
v
A-B-C-E-F < master
\
(D) < master on remote
Поскольку ваш локальный репозиторий не имеет D, a git merge origin/master
просто даст:
Already up-to-date.
Так как, насколько ваш локальный репозиторий, мастер уже имеет все в оригинале /master.
Что лучше?
Ничего из перечисленного.:)
git fetch
git rebase origin/master master
или ярлык git pull -r
, но лично я предпочитаю видеть изменения до того, как переустановить.
Это приведет к повторному изменению ваших изменений на главном (E, F) поверх начала/хозяина (D) без фиксации слияния. Это дает:
A-B-C-D-E'-F' < master
^
origin/master, master on remote
Обратите внимание, что все в одной строке, вы готовы нажать, а история не похожа на браслет дружбы.
Одно предупреждение - никогда не переустанавливайте какие-либо коммиты, которые уже были нажаты. Обратите внимание, что E и F стали E 'и F' после перезагрузки. Коммиты полностью переписаны, с новым SHA и всем остальным. Если вы перезагружаете коммиты, которые уже являются общедоступными, разработчики будут переиздавать свою историю для них, когда они будут тянуть. И это ужасно, и каждый даст вам злые глаза и избежит вас.