Що робить команда git fetch?

Команда git fetch використовується для отримання всіх змін з віддаленого репозиторію, але не зливає їх з вашим поточним робочим гілкою, як робить це команда git pull . Замість цього вона завантажує оновлені дані в ваш локальний репозиторій, щоб ви могли подивитися на них, порівняти їх з вашої робочої гілкою та прийняти рішення про те, які зміни ви хочете злити або відкинути. Це дозволяє вам оновити ваш локальний репозиторій і подивитися на зміни, які здійснюються віддалено, не обов’язково об’єднуючи їх із вашим робочим простором одразу.

А як переглянути зміни?

Після того, як ви виконали git fetch, ви можете переглянути зміни, які були отримані з віддаленого репозиторію, за допомогою різних команд. Одна з таких команд - це git diff.

  1. Перегляд змін між вашою локальною гілкою та гілкою на віддаленому репозиторії:

    git diff origin/master
    

    В цьому прикладі origin/master - це назва гілки на віддаленому репозиторії, з якою ви порівнюєте вашу локальну гілку. Ви побачите зміни між вашою локальною гілкою та гілкою master на віддаленому репозиторії.

  2. Перегляд змін, які ще не були об’єднані з вашою локальною гілкою:

    git diff origin/master..HEAD
    

    Ця команда покаже вам різницю між гілкою на віддаленому репозиторії та вашою поточною робочою гілкою.

  3. Перегляд змін, які вже були витягнуті, але ще не об’єднані з вашою локальною гілкою:

    git diff HEAD..origin/master
    

    Ця команда покаже вам різницю між вашою поточною робочою гілкою та гілкою на віддаленому репозиторії.

Команди git diff показують вам зміни у вигляді різниці між різними версіями файлів, що дозволяє вам переглянути зміни, які відбулися.

А як об’єднати зміни?

Після того, як ви переглянули зміни та вирішили об’єднати їх з вашою локальною гілкою, ви можете скористатися командою git merge або git rebase .

  1. git merge:

Команда git merge зливає зміни з іншої гілки у вашу поточну гілку.

git merge <назва_гілки>

Наприклад, якщо ви хочете об’єднати зміни з гілки feature-branch у вашу поточну гілку:

git merge feature-branch
  1. git rebase:

Команда git rebase перебудовує гілку, використовуючи зміни з іншої гілки. Вона призводить до історії комітів, яка здається прямою, без злиття.

git rebase <назва_гілки>

Наприклад:

git rebase feature-branch

Обидві ці команди допоможуть вам об’єднати зміни з віддаленого репозиторію у вашу локальну гілку. Після цього ви можете розглянути конфлікти та вирішити їх у разі необхідності, а потім зберегти зміни за допомогою команд git add і git commit .

А які конфлікти можуть бути?

Конфлікти виникають, коли система керування версіями не може автоматично об’єднати зміни від двох різних гілок (або гілки та коміту) через суперечливості в тих самих частинах файлів. Ось деякі типові ситуації, які можуть призвести до конфліктів:

  1. Зміни в одному файлі:
  • Якщо обидві гілки внесли зміни в один і той же рядок або ділянку коду, система керування версіями не може визначити, яка версія є “правильною”.
  1. Видалення або перейменування файлів:
  • Якщо одна гілка видаляє файл або перейменовує його, тоді якась інша гілка може намагатися змінити або видалити цей файл.
  1. Об’єднані зміни:
  • Якщо обидві гілки вносять зміни в ту ж функціональність або частину коду, але в різний спосіб, то може виникнути конфлікт, оскільки система не зможе визначити, яка версія слід використовувати.
  1. Зміни в структурі файлів:
  • Конфлікти також можуть виникати внаслідок змін в структурі директорій або інших метаданих файлів.

Коли виникає конфлікт, система Git позначає це у ваших файлах спеціальними маркерами, що показують, які зміни призвели до конфлікту та як їх можна вирішити. Вам потрібно розглянути ці конфлікти, вирішити їх вручну, видаливши маркери конфлікту та обираючи потрібні зміни, після чого зберегти файл та продовжити процес злиття.

Якщо щось пішло не так зі злиттям, то як повернутися назад?

Якщо щось пішло не так зі злиттям і ви хочете скасувати злиття та повернутися до попереднього стану, є декілька способів зробити це, залежно від того, яку команду ви використовували для злиття:

Якщо ви використовували git merge:, то ви можете скасувати злиття та повернутися до попереднього стану, використовуючи команду git merge --abort:

git merge --abort

Ця команда скасує злиття та поверне вашу гілку до того стану, в якому вона була перед спробою злиття.

Якщо ви використовували git rebase, то ви можете скасувати незавершений перебудову гілки за допомогою команди git rebase --abort:

git rebase --abort

Ця команда скасує процес перебудови гілки та поверне вас до попереднього стану, перш ніж ви розпочали перебудову.

Після виконання однієї з цих команд ви можете перевірити стан вашого репозиторію за допомогою git status, щоб підтвердити, що злиття було скасовано та ваша гілка повернулася до попереднього стану.