git fetch — Загрузка без слияния
Команда git fetch скачивает коммиты, ветки и теги из удалённого репозитория, но в отличие от git pull, она не изменяет вашу рабочую директорию или текущую ветку. Это безопасный способ узнать, что делали другие.
Как работает fetch
Когда вы выполняете git fetch, Git связывается с удалённым репозиторием и скачивает все новые коммиты. Эти коммиты сохраняются в ваших отслеживающих ветках (например, origin/main), оставляя локальные ветки нетронутыми.
До fetch:
локальная: A --- B --- C (main)
удалённая: A --- B --- D --- E (origin/main на сервере)
После fetch:
локальная: A --- B --- C (main) <- без изменений!
отслеживающая: A --- B --- D --- E (origin/main)
Ваш main по-прежнему указывает на C. Новые коммиты D и E доступны в origin/main для просмотра.
Базовое использование
git fetch origin
Эта команда скачивает все ветки из удалённого репозитория origin. Можно также загрузить конкретную ветку:
git fetch origin main
Просмотр загруженных изменений
После fetch вы можете просмотреть изменения перед принятием решения о слиянии:
git log main..origin/main --oneline
Эта команда показывает коммиты, которые есть в origin/main, но отсутствуют в вашем локальном main. Также можно посмотреть, что именно изменилось:
git diff main origin/main
Fetch и Pull
| Команда | Скачивает? | Сливает? | Безопасно? |
|---|---|---|---|
git fetch | Да | Нет | Очень безопасно |
git pull | Да | Да | Могут возникнуть конфликты |
Думайте о git pull как о комбинации git fetch + git merge. Если сомневаетесь — сначала сделайте fetch.
Попробуйте!
Потренируйтесь загружать и просматривать удалённые изменения перед слиянием:
- Проверьте текущий лог:
git log --oneline - Загрузите обновления из origin:
git fetch origin - Посмотрите, какие новые коммиты пришли:
git log main..origin/main --oneline - Сравните различия:
git diff main origin/main - Когда будете готовы, выполните слияние вручную:
git merge origin/main - Подтвердите слияние:
git log --oneline
Когда использовать fetch
- Перед началом работы — Загрузите изменения, чтобы увидеть обновления, а затем решите, как их интегрировать
- Когда хотите просмотреть изменения — Fetch позволяет изучить изменения перед слиянием
- В скриптах — Fetch предсказуем, потому что никогда не изменяет вашу рабочую директорию
- Когда вы заняты другой работой — Fetch не нарушит текущую работу