В чем разница между git pull и git fetch?

«В чем разница между git pull и git fetch?» — вопрос из категории DevOps, который задают на 28% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

git fetch и git pull — это команды для получения изменений с удаленного репозитория, но они работают по-разному.

  • git fetch только загружает последние изменения (коммиты, ветки, теги) из удаленного репозитория (например, origin) в ваш локальный репозиторий. Она обновляет ваши удаленные ветки (вроде origin/main), но не вносит изменений в ваши рабочие ветки (main, feature). Это безопасная операция для просмотра, что изменилось.
  • git pull = git fetch + git merge. Она не только загружает изменения, но и сразу пытается объединить (merge) их с вашей текущей активной веткой. Это может автоматически создать коммит слияния или привести к конфликтам.

Типичный рабочий процесс:

# 1. Безопасно получить свежие данные с сервера
git fetch origin

# 2. Посмотреть, что изменилось в upstream ветке, не трогая свой код
git log --oneline main..origin/main

# 3. Если изменения устраивают, влить их в свою ветку
#    Способ A: Через merge (создаст коммит слияния)
git merge origin/main

#    Способ B: Через rebase (переместит ваши коммиты поверх новых)
git rebase origin/main

# Альтернативно, можно было сделать одним действием (аналог git fetch + git merge)
git pull origin main

Вывод: Использую git fetch, когда хочу сначала проверить изменения. git pull — для быстрого обновления ветки, в которой я уверен, что мои локальные правки уже закоммичены и конфликтов не будет.