Синхронізація Репозиторіїв
Свайпніть щоб показати меню
Як згадувалося у попередньому розділі, необхідно синхронізувати локальну гілку з віддаленим репозиторієм. Для цього слід виконати команду git pull:
git pull
Під час виконання команди git pull Git отримав оновлення, але виявив, що локальна та віддалена гілки розійшлися, тобто є зміни в обох гілках, які потрібно узгодити. Git не зміг продовжити, оскільки йому потрібно знати, як обробити ці відмінності, тому встановимо опцію merge і знову виконаємо команду git pull:
git config pull.rebase false
Операцію rebase буде розглянуто пізніше в цьому курсі.
git pull
Git спробував автоматично об'єднати локальні та віддалені зміни у файлі README.md, але виник конфлікт злиття. Розглянемо дерево комітів, яке показує, де відбулося розгалуження та виникли конфлікти:
git log --graph --oneline --all
Вирішення конфлікту
Як видно, наш поточний локальний коміт і коміт у віддаленій гілці main мають спільного предка, але розійшлися, що призвело до конфлікту злиття, який потрібно вирішити. Для цього відкриємо файл README.md у редакторі Vim:
vim README.md
Щоб вирішити цей конфлікт, потрібно увійти в режим вставки натисканням i, видалити маркери конфлікту та об'єднати ці зміни наступним чином:
Далі слід натиснути клавішу Escape, ввести :wq і натиснути клавішу Enter, щоб зберегти зміни та вийти з Vim. Тепер, щоб завершити злиття, файл README.md потрібно додати до області індексації, а потім зафіксувати за допомогою відповідних команд:
git add README.md
git commit
Після виконання команди git commit відкриється текстовий редактор за замовчуванням (найімовірніше, Vim). Ви можете залишити повідомлення коміту за замовчуванням і вийти з Vim так само, як щойно, або відредагувати повідомлення і потім вийти.
Нарешті, можна безпечно виконати команду git push і переконатися, що тристороннє злиття пройшло успішно, переглянувши дерево комітів:
git log --graph --oneline --all
Підсумуємо, що було зроблено у цих двох главах:
-
Було змодельовано співпрацю шляхом внесення змін як локально, так і віддалено у файл
README.md; -
Спочатку зміни були закомічені безпосередньо у віддалений репозиторій, а потім інші зміни зроблені локально;
-
При спробі відправити локальні зміни виник конфлікт, оскільки у віддаленому репозиторії з’явилися нові оновлення;
-
Для вирішення цього було виконано отримання змін з віддаленого репозиторію, що призвело до конфлікту злиття;
-
Далі конфлікт у файлі
README.mdбуло вирішено вручну за допомогою редактора Vim, закомічено вирішені зміни та успішно відправлено фінальні оновлення у віддалений репозиторій.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат