Короткий ответ «да», но длинный ответ только в основном «да».
Если ваша версия Git старше 2.6, ваша git pull
простая- хорошо, хорошо, может быть, не так просто, весом более 300 строк - сценарий оболочки , который запускает эту строку :
git fetch $verbosity $progress $dry_run $recurse_submodules --update-head-ok "$@" || exit 1
Здесь $@
включает в себя большинство аргументов, которые люди обычно вводят в git pull
:
git pull origin master
, например, будет работать:
git fetch origin master
(несколько параметров удаляются из $@
для передачи вкоманда rebase или merge, если необходимо.)
Начиная с Git версии 2.6.0, git pull
теперь кодируется в C, но все равно вызывает ту же самую операцию git fetch
- она быстрее в Windows, чем нет. дольше нужно задействовать оболочку.
Часть, где ответ только в основном"да", состоит в том, что после выборки, оставшаяся часть git pull
не обязательно git merge
. Это может быть git rebase
или даже в нескольких угловых случаях git read-tree
. Подробности см. В остальной части сценария.
Обратите внимание, что если у вас более одного пульта и вы запускаете git fetch
без дополнительных аргументов, Git будет использовать настроенный удаленный филиал текущей ветви, если он есть,или origin
, если нет настроенного пульта дистанционного управления. Когда вы запускаете git pull <em>remote branch-name</em>
, вы предоставляете именованный пульт, который переопределяет настроенный удаленный филиал текущей ветви (если есть). Так что это может быть источником различий: если текущая ветвь не имеет восходящего набора, git fetch
будет извлекать из origin
, но git pull otherremote foo
будет извлекать из удаленного otherremote
.