📝 Git и GitHub

Git конфликты: разбираем по шагам ⚔️

0
Автор
04e5cc8b-58ac-4bdc-bdee-661bbb
📅
Опубликовано
06.05.2026
⏱️
Время чтения
4 мин
👁️
Просмотров
46
🌱
Уровень
Начальный
🐦 💼 ✈️

Merge conflict — это ситуация когда Git не может автоматически объединить изменения из двух веток, потому что оба разработчика изменили одно и то же место в одном файле.

Что такое merge conflict

Почему возникает конфликт

main:    ... строка A ...  →  ... строка A исправлена Иваном ...
feature: ... строка A ...  →  ... строка A исправлена Марией ...

Git не знает чью версию строки A оставить — вашу или из main. Он останавливается и просит человека принять решение.

Конфликт — это нормально. Он возникает у всех разработчиков. Это не ошибка Git и не чья-то вина — просто два человека работали над одним местом кода одновременно.

Когда возникает конфликт

  • При git merge (слиянии веток)
  • При git pull (если удалённая ветка изменилась)
  • При обновлении ветки от main
  • При создании PR (GitHub покажет предупреждение)

Как выглядит конфликт

После неудачного merge Git помечает конфликтные места прямо в файле:

<<<<<<< HEAD (или название вашей ветки)
Ваши изменения
=======
Изменения из другой ветки (main)
>>>>>>> main

Разбираем маркеры:

<<<<<<< HEAD
| Анна Морозова | @anna-morozova | Москва |    ← ВАША версия
=======
| Сергей Павлов | @sergey-pavlov | Питер |    ← версия из main
>>>>>>> main

Всё что между <<<<<<< и ======= — ваши изменения.
Всё что между ======= и >>>>>>> — изменения из другой ветки.

Способы разрешения

Разрешение в GitHub Desktop

GitHub Desktop обнаруживает конфликт автоматически и показывает предупреждение.

Шаг 1: Увидели предупреждение

GitHub Desktop показывает:

⚠️ «There are merge conflicts» + список конфликтных файлов

Шаг 2: Откройте файл в редакторе

Нажмите Open in Editor или откройте файл вручную.

Шаг 3: Найдите маркеры и разрешите

Вам нужно:
1. Выбрать нужный контент (вашу версию, чужую, или обе)
2. Удалить ВСЕ три маркера: <<<<<<<, =======, >>>>>>>
3. Сохранить файл

Шаг 4: Сделайте коммит

Вернитесь в GitHub Desktop — конфликтный файл теперь в Changes.
Напишите commit message: fix: разрешён конфликт в contributors.md
Нажмите Commit.

Разрешение в VS Code

VS Code показывает конфликты с кнопками прямо в редакторе:

  • Accept Current Change — оставить вашу версию
  • Accept Incoming Change — оставить версию из другой ветки
  • Accept Both Changes — оставить обе версии (одну за другой)
  • Compare Changes — показать различия рядом

Нажмите нужную кнопку — VS Code сам уберёт маркеры.

Три варианта разрешения

1. Оставить вашу версию

<<<<<<< HEAD
Ваша версия строки
=======
Чужая версия строки
>>>>>>> main

Удалите всё кроме вашей версии:

Ваша версия строки

2. Оставить чужую версию

Чужая версия строки

3. Оставить обе

Это самый частый случай в contributors.md:

<<<<<<< HEAD
| Студент | @student | Казань |
=======
| Дмитрий | @dmitry | Байкал |
>>>>>>> main

Нужно сохранить обе строки:

| Дмитрий | @dmitry | Байкал |
| Студент | @student | Казань |

4. Написать новую версию

Иногда нужно объединить оба изменения или написать третий вариант:

<<<<<<< HEAD
function getUserName(user) {
    return user.name;
}
=======
function getUserName(user) {
    return user.firstName + " " + user.lastName;
}
>>>>>>> main

Разрешение: объединить оба улучшения:

function getUserName(user) {
    return user.firstName + " " + user.lastName || user.name;
}

Конфликт в Pull Request

Если PR показывает «This branch has conflicts», нужно:

Метод 1: Sync fork + Update branch (для форков)

  1. На GitHub: Sync fork → Update branch
  2. В GitHub Desktop: Fetch origin → Pull
  3. Branch → Update from default branch
  4. Разрешите конфликт в редакторе
  5. Commit → Push → PR обновится

Метод 2: Merge main в ветку

git checkout feature/my-feature
git merge main  # здесь возникнет конфликт
# разрешите конфликт
git add .
git commit -m "fix: разрешён конфликт"
git push

Метод 3: Через GitHub (простые конфликты)

GitHub иногда позволяет разрешить конфликт прямо в браузере:
PR → «Resolve conflicts» → редактор в браузере → «Mark as resolved».

Как убедиться что всё разрешено

После разрешения:
- В файле НЕТ строк с <<<<<<<, =======, >>>>>>>
- GitHub Desktop показывает файл без значка конфликта
- PR показывает «No conflicts — This branch has no conflicts with the base branch» ✅

Как избежать конфликтов

Полностью избежать конфликтов невозможно, но можно сократить их частоту:

Делайте маленькие PR

Чем меньше изменений — тем меньше шанс что кто-то тронет тот же файл.

Регулярно обновляйте ветку

git merge main  # раз в день обновляйте ветку от main

Договоритесь кто работает с каким файлом

Если двое работают с одним файлом — предупредите друг друга.

Быстро мёрджите PR

PR который «висит» неделю накапливает конфликты. Мёрджите быстрее.

Отменить merge и начать заново

Если запутались — можно всё отменить:

git merge --abort  # отменяет merge, возвращает состояние до

В GitHub Desktop: нажмите Abort merge в панели предупреждения.

Конфликты бояться не надо

Конфликты — признак активной командной работы. Чем больше разработчиков работает над проектом — тем чаще возникают конфликты.

Умение разрешать конфликты быстро и правильно — важный навык разработчика. После нескольких раз это становится привычным делом занимающим 2-3 минуты.

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

Платформы хостинга Git: полное сравнение 🏆

GitHub, GitLab, Bitbucket — какую выбрать? Полное сравнение с актуальными данными.

📅 06.05.2026 👁️ 55
📝

Что такое Git Commit и зачем он нужен? 📸

Коммит — это сохранённый снимок вашего проекта в определённый момент времени, как сохранение в видеоигре!

📅 06.05.2026 👁️ 57
📝

Почему Git победил другие системы контроля версий…

Сегодня Git — это стандарт де-факто для контроля версий в разработке программного обеспечения. Но так...

📅 06.05.2026 👁️ 53

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!