Чим відрізняється git pull від git fetch?
git fetch та git pull обидва отримують зміни з remote-репозиторію, але працюють по-різному. Розуміння різниці допомагає уникати несподіваних конфліктів.
git fetch завантажує зміни з remote, але не застосовує їх до вашої робочої директорії. Оновлюються лише remote-tracking-гілки (origin/main, origin/feature і т.д.). Ваша локальна гілка та робочі файли залишаються недоторканими. Після fetch ви можете переглянути зміни: git log origin/main, git diff main origin/main. Це безпечно — ви нічого не ламаєте, просто отримуєте інформацію про нові коміти.
git pull = git fetch + git merge. Спочатку завантажує зміни, потім одразу об'єднує їх з вашою поточною гілкою. Якщо в remote є нові коміти, а у вас — локальні зміни, pull створить merge-коміт або, при розбіжностях, конфлікти. Це може бути несподіваним, якщо ви не перевірили, що саме змінилося в remote.
Коли використовувати fetch: завжди, коли хочете подивитися, що нового в remote, перед застосуванням. Особливо корисно перед початком роботи — виконайте git fetch вранці, перевірте git log origin/main, і якщо все гаразд, зробіть git merge або git rebase. Також fetch потрібен для перегляду чужих feature-гілок без перемикання на них.
Коли використовувати pull: коли ви впевнені, що в remote немає несподіваних змін і хочете швидко оновитися. Наприклад, ви єдиний розробник на гілці або зміни тривіальні.
Pull з rebase: git pull --rebase замість merge застосовує ваші локальні коміти поверх завантажених. Це дає лінійну історію без merge-комітів. Можна налаштувати за замовчуванням: git config --global pull.rebase true. Багато команд віддають перевагу цьому варіанту.
Практична порада: використовуйте git fetch за звичкою, а git pull — лише коли точно знаєте, що отримаєте. Це позбавить від несподіваних конфліктів у невідповідний момент.