📝 Python

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

0
Author
04e5cc8b-58ac-4bdc-bdee-661bbb
📅
Published
06.05.2026
⏱️
Reading time
4 min
👁️
Views
21
🌱
Level
Beginner

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

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

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 минуты.

Your reaction to the article

💬 Comments (0)

🔐 Sign in to leave a comment
🚪 Login
💭

No comments yet

Be the first to share your opinion about this article!

🔗 Similar

Similar articles

Continue learning with these materials

📝

Модуль datetime: работа с датами и временем

datetime — стандартный модуль Python для работы с датами и временем. Входит в стандартную библиотеку,...

📅 08.05.2026 👁️ 30
📝

.env файлы и переменные окружения: секреты вне ко…

Представь что ты написал программу с API-ключом прямо в коде и залил её на GitHub....

📅 08.05.2026 👁️ 35
📝

Виртуальные окружения в Python: зачем и как

Когда начинаешь второй Python-проект и ставишь pip install requests — эта библиотека устанавливается глобально, для...

📅 08.05.2026 👁️ 31

Did you like the article?

Subscribe to our updates and receive new articles first. Grow with PyLand!