
Всем привет. Сегодня мы с вами разберем как мерджить конфликты в гите. Итак, в момент того как мы пишем команду git merge и мерджим фичу в девелоп, например, гит автоматом мерджит все наши файлы между этими двумя ветками. Если это ему не удалось, он вываливает сообщение что у нас конфликт в мердже и его нужно пофиксить руками.
И первый вопрос, конечно же, когда возникают конфликты. Если например 2 разработчика поменяли один и тот же код в файле и гит не может померджить его автоматически, то у нас будет конфликт. Если вы с работы сильно изменили кусок кода, запушили его и дома написали git pull, вполне возможно у вам будет конфликт, который нужно тоже мерджить руками.
Давайте попробуем это сделать. Для начала нам нужно эмулировать конфликт. Давайте создадим новую ветку
git checkout -b conflicted-branch
И изменим файл auth.js. Поменяем в нем знак И на ИЛИ. Также изменим сообщение.
git add .
git commit -m "Changed auth on conflicted-branch"
Теперь представим, что пока мы работали на этой ветке, кто-то поменял develop ветку.
git checkout develop
И вообще уберем проверку пароля. И также изменим сообщение в return.
Сделаем коммит на ветке develop.
git add .
git commit -m "Changed auth.js"
Теперь попробуем померджить фиче ветку в develop.
git merge conflicted-branch
Мы видим сообщение Auto merging failed. Пофиксите конфликты и закоммититесь.
Если мы откроем auth.js, то мы увидим, что файл выглядит немного странно. Он разделен как бы на 2 части. Первая часть подписана HEAD, что значит текущая ветка, а вторая подписана conflicted-branch. Теперь мы вручную должны отредактировать файл, устранив ошибки и символы которые сделал гит.
Убираем стрелки и редактируем код. Теперь достаточно просто сохранить файл и сделать git commit как обычно.
Но как вы понимаете когда изменений на 500 строк в 10ти разных файлах и все их нужно померджить, то делать это руками в редакторе боль и унижение. Поэтому люди пользуются разными впромогательными инструментами для мерджа конфликтов.
Я предпочитаю использовать для этого WebStorm так как на мой взгляд в нем встроен лучший мердж тул. Поэтому давайте откатим изменения и попробуем смерджить все эти конфликты в Webstorm.
Нажимаем VCS - git - resolve conflicts и видим список файлов с конфликтами. Нажимаем merge и видим окно с 3 табами. В левом табе локальные изменения, то есть develop. В правом табе с ветки conflicted-branch, а посередине как будет выглядеть реальный файл после мерджа.
В вебшторме области при мердже бывают зеленые и красные. Зеленых у нас сейчас нет, но это области в которых нет конфликта и которые были просто добавлены с какой-то стороны. Красные области это конфликты.
С помощью стрелок и крестиков можно выбирать что и с какой ветки мы хотим взять. Если же нам ничего не подходит, мы может написать код руками либо скопировать с любой стороны. Давайте выберем return сообщение слева, а условие справа. На остальном жмем крестик.
Вебшторм нам говорит, что конфликтов нет и все хорошо. После этого можно делать коммит как обычно.