Коротка відповідь
juniorКоманда `git fetch` синхронізує локальний репозиторій з віддаленим, завантажуючи нові комміти та оновлюючи remote‑branches без зміни локальних гілок. Вона не об’єднує зміни – лише оновлює інформацію про стан віддаленого репозиторію.
Повне пояснення
Що це і навіщо
git fetchотримує останні комміти з віддаленого репозиторію (наприклад,origin) і оновлює відповідні remote‑branches (origin/main,origin/feature).- Після fetch можна перевірити нові зміни, порівняти їх з локальними гілками або об’єднати через
git merge/rebase.
Ключові принципи
fetchне змінює локальні гілки; оновлюється лише інформація про віддалені.- Після fetch можна виконати
git log origin/main..mainдля перегляду нових коммітів.
Як це працює
- Git встановлює з’єднання з віддаленим репозиторієм, запитує об’єкти (blob, tree, commit) і зберігає їх у локальній базі.
- Оновлюються лише ті об’єкти, яких ще немає локально (пакетний режим).
Практика й реалізація
# Отримати оновлення з віддаленого репозиторію
git fetch origin
# Перевірити нові комміти
git log HEAD..origin/main --oneline
Тестування
- У CI можна виконати
git fetch --quietперед тестами, щоб переконатися, що локальна копія актуальна.
Оптимізація запитів
- Використовуйте
--depth 1для shallow‑fetch, коли потрібен лише останній коміт.
Безпека
fetchне виконує коду, тому ризик XSS/SQL‑injection мінімальний. Однак слід перевіряти віддалений репозиторій на довіру.
Особливості в контексті DevOps
- У CI/CD pipelines
git fetchчасто слідкує за оновленнями перед збіркою. - Після fetch можна автоматично запускати
git rebaseабоmergeу робочому процесі.
Часті помилки
- Відсутність прав на доступ – перевірити SSH‑ключі або HTTPS‑автентифікацію.
- Невідповідність remote‑URL –
git remote -v. - Виконання fetch у гілці, що не існує локально – спочатку створити гілку.
- Використання
git pullзамість fetch + merge – це може створити непередбачувані конфлікти. - Відсутність
origin– додати remote:git remote add origin <url>. - Проблеми з кешем –
git gc --prune=now. - Невірний branch‑name – перевірити назву через
git branch -a. - Відсутність оновлень – перевірити, чи є нові комміти на віддаленому репозиторії.
Cheatsheet
git fetch <remote>– отримати оновлення.git fetch --all– всі remotes.git fetch <remote> <branch>– конкретну гілку.git log HEAD..origin/<branch>– нові комміти.