Git Fetch vs Pull
Последнее обновление
git fetch скачивает последние коммиты из удалённого репозитория, но оставляет вашу рабочую ветку ровно такой, какой она была. git pull выполняет то же самое скачивание, а затем сразу вливает эти коммиты в вашу текущую ветку. Коротко: git pull = git fetch + git merge.
Используйте fetch, когда хотите посмотреть, прежде чем действовать; используйте pull, когда готовы интегрировать изменения. Попробуйте оба в терминальном playground - настоящей оболочке в вашем браузере.
Бок о бок
| Behavior | git fetch | git pull |
|---|---|---|
| Скачивает удалённые коммиты | Да | Да |
| Изменяет вашу текущую ветку | Нет | Да |
| Может вызвать конфликты слияния | Нет | Да |
| Эквивалентно | только скачивание | fetch + merge |
Синтаксис
| Command | What it does |
|---|---|
git fetch | Скачивает все удалённые изменения, без слияния |
git fetch origin main | Получает только одну ветку из удалённого репозитория |
git pull | Скачивает и вливает в текущую ветку |
git pull --rebase | Скачивает, затем делает rebase ваших коммитов поверх |
git log HEAD..origin/main | После fetch: посмотрите, что бы вы слили |
Часто задаваемые вопросы о Git fetch vs pull
В чём разница между git fetch и git pull?
git fetch скачивает новые коммиты и обновляет ваши ветки удалённого отслеживания (такие как origin/main), но не изменяет вашу рабочую ветку. git pull выполняет тот же fetch, а затем вливает новые коммиты в вашу текущую ветку. То есть pull изменяет ваши файлы; fetch лишь обновляет ваше представление об удалённом репозитории.Правда ли, что git pull - это просто fetch плюс merge?
Да.
git pull - это сокращение для git fetch, за которым следует git merge полученной ветки в вашу текущую. С git pull --rebase вторым шагом становится rebase вместо merge, что сохраняет историю линейной.Когда мне следует использовать fetch вместо pull?
Используйте
git fetch, когда хотите просмотреть входящие изменения перед их интеграцией - например, git fetch, а затем git log HEAD..origin/main, чтобы точно увидеть, что нового. Используйте git pull, когда вы уже доверяете удалённым изменениям и просто хотите слить их в свою ветку.Может ли git fetch когда-либо вызвать конфликты?
Нет. Fetch только обновляет ветки удалённого отслеживания; он никогда не трогает вашу рабочую ветку или файлы, поэтому не может вызвать конфликты слияния. Конфликты возникают только на этапе merge - который pull выполняет автоматически, а fetch нет.
Могу ли я потренироваться в этом онлайн?
Да. Откройте терминальный playground, чтобы выполнить
git fetch и git pull в настоящей оболочке в вашем браузере - ничего устанавливать не нужно. Бесплатный интерактивный курс по Git от Coddy также пошагово охватывает работу с удалёнными репозиториями.