Глиф Учебники

Чем git pull отличается от git fetch

Справочник · Git · 1 минута чтения

Иначе говоря: git pull = git fetch + git merge origin/main (для ветки main).

Что такое origin/main

После fetch скачанное лежит в ветках вида origin/main — это копия того, как ветка main выглядела на сервере origin в момент последнего обмена. Ваша main и origin/main — разные ветки: первая двигается вашими коммитами, вторая — только при fetch, pull и push.

Все ветки, включая скачанные, показывает git branch -a:

Терминал
$ git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main

Посмотреть чужие изменения до слияния

Именно для этого fetch и нужен отдельно: сначала посмотреть, потом решить.

Bash
git fetch
git log --oneline main..origin/main
git diff main origin/main
git merge origin/main

Вторая команда показывает коммиты, которые есть на сервере, но ещё не у вас; третья — разницу в файлах; четвёртая — сливает, как это сделал бы pull. Если решили не сливать — просто ничего не делайте: ваша ветка не изменилась.

Сколько вы отстаёте или опережаете, после fetch подскажет git status:

Текст
Your branch is behind 'origin/main' by 1 commit, and can be fast-forwarded.

Когда что использовать

СитуацияКоманда
Обычное обновление своей ветки перед работойgit pull
Узнать, что нового на сервере, ничего не трогаяgit fetch, затем git status или git log
В рабочей папке незакоммиченные правки, а посмотреть хочетсяgit fetch — правкам он не мешает
Обновить сведения обо всех удалённых репозиториях сразуgit fetch --all

Подводные камни