Поиск…
Вступление
В отличие от нажатия Git, где ваши локальные изменения отправляются на сервер центрального репозитория, потянув с помощью Git, текущий код на сервере и «вытаскивает» его из сервера хранилища на ваш локальный компьютер. В этом разделе описывается процесс вытягивания кода из репозитория с использованием Git, а также ситуаций, которые могут возникнуть при переносе кода в локальную копию.
Синтаксис
- git pull [опции [<репозиторий> [<refspec> ...]]
параметры
параметры | подробности |
---|---|
--quiet | Нет текстового вывода |
-q | сокращение для --quiet |
--verbose | подробный вывод текста. Передано для извлечения и объединения / переупорядочения команд соответственно. |
-v | стенография для --verbose |
--[no-]recurse-submodules[=yes | on-demand | no] | Получить новые коммиты для подмодулей? (Не то, чтобы это не вытягивание / проверка) |
замечания
git pull
запускает git fetch
с заданными параметрами и вызывает git merge
чтобы объединить полученные ветви ветви в текущую ветку.
Обновление с локальными изменениями
Когда локальные изменения присутствуют, команда git pull
отменяет отчетность:
Ошибка: ваши локальные изменения в следующих файлах будут перезаписаны слиянием
Чтобы обновить (например, обновление svn с помощью subversion), вы можете запустить:
git stash
git pull --rebase
git stash pop
Удобным способом может быть определение псевдонима с использованием:
git config --global alias.up '!git stash && git pull --rebase && git stash pop'
git config --global alias.up 'pull --rebase --autostash'
Затем вы можете просто использовать:
git up
Вытянуть код из удаленного
git pull
Вытянуть, перезаписать локальный
git fetch
git reset --hard origin/master
Остерегайтесь: в то время как reset --hard
сбрасывается с помощью reset --hard
может быть восстановлена с использованием reflog
и reset
, незафиксированные изменения удаляются навсегда.
Измените origin
и master
на удаленный и ветвь, которые вы хотите принудительно вывести, соответственно, если они названы по-разному.
Сохранение линейной истории при вытягивании
Сбрасывание при вытягивании
Если вы извлекаете новые коммиты из удаленного репозитория, и у вас есть локальные изменения в текущей ветви, тогда git автоматически объединит удалённую версию и вашу версию. Если вы хотите уменьшить количество слияний в своем филиале, вы можете сказать git, чтобы переустановить ваши коммиты на удаленной версии ветки.
git pull --rebase
Поведение по умолчанию
Чтобы сделать это по умолчанию для вновь созданных ветвей, введите следующую команду:
git config branch.autosetuprebase always
Чтобы изменить поведение существующей ветки, используйте следующую команду:
git config branch.BRANCH_NAME.rebase true
А также
git pull --no-rebase
Выполнять нормальное слияние.
Проверьте, есть ли возможность быстрой пересылки
Чтобы разрешить быструю переадресацию локальной ветви, вы можете использовать:
git pull --ff-only
При этом будет отображаться ошибка, когда локальная ветка не является быстрой переадресацией, и ее необходимо либо переустановить, либо объединить с восходящим потоком.
Потяните, «разрешение отклонено»
Некоторые проблемы могут возникнуть, если папка .git
имеет неправильное разрешение. Устранить эту проблему, установив владельца полной папки .git
. Иногда бывает, что другой пользователь тянет и меняет права на .git
папку или файлы.
Решить проблему:
chown -R youruser:yourgroup .git/
Вытягивание изменений в локальный репозиторий
Простое натяжение
Когда вы работаете с удаленным репозиторием (например, GitHub) с кем-то другим, вы в какой-то момент захотите поделиться своими изменениями с ними. Как только они переместили свои изменения в удаленный репозиторий, вы можете получить эти изменения, потянув из этого репозитория.
git pull
Сделаю это, в большинстве случаев.
Потяните с другого пульта или ветви
Вы можете тянуть изменения с другого удаленного или ветви, указав их имена
git pull origin feature-A
Вытащить feature-A
ветки feature-A
origin
формы в вашу локальную ветку. Обратите внимание, что вы можете напрямую указывать URL вместо удаленного имени и имя объекта, например, SHA вместо имени филиала.
Ручная тяга
Чтобы имитировать поведение git pull, вы можете использовать git fetch
затем git merge
git fetch origin # retrieve objects and update refs from origin
git merge origin/feature-A # actually perform the merge
Это может дать вам больше контроля и позволяет вам проверять удаленную ветвь перед ее объединением. Действительно, после извлечения вы можете видеть удаленные ветви с git branch -a
и проверить их с помощью
git checkout -b local-branch-name origin/feature-A # checkout the remote branch
# inspect the branch, make commits, squash, ammend or whatever
git checkout merging-branches # moving to the destination branch
git merge local-branch-name # performing the merge
Это может быть очень удобно при обработке запросов на загрузку.