Как разрешаются конфликты слияния в Git?

Опубликовано: 2021-09-16

Если вы когда-либо работали над крупномасштабным программным обеспечением в сотрудничестве с другими разработчиками, вы должны знать о контроле версий. Git — одна из наиболее часто используемых систем управления версиями с открытым исходным кодом, которая позволяет разработчикам работать одновременно и сотрудничать даже из удаленных мест. Однако, поскольку многие пользователи работают одновременно, возможны конфликты, о которых необходимо позаботиться. В этой статье давайте объясним основы конфликтов слияния в Git и способы разрешения конфликтов слияния в Git.

Оглавление

Что такое конфликт слияния в Git?

Все современные инструменты управления версиями работают над одной ключевой особенностью — возможностью для разных программистов работать над одним файлом одновременно, не мешая работе друг друга. Git позволяет это реализовать, реализуя что-то, называемое «ветвью». Сначала нескольким разработчикам разрешается работать над отдельными ветвями локально. Затем они должны отправить код в централизованный репозиторий. Оттуда другие пользователи могут вернуть обновленный код в свою локальную ветку и продолжить свою работу.

Когда происходят такие параллельные изменения в режиме реального времени, всегда существует вероятность того, что работа будет перекрываться. Иногда несколько разработчиков могут изменять одну и ту же строку кода по-разному. В таких сценариях GIt не может определить правильную версию кода, поскольку это может понять только разработчик. Если произойдет такой сценарий, вы увидите следующую ошибку слияния git:

Автообъединение [файл1]

КОНФЛИКТ (содержимое): конфликт слияния в [файл1]

Автоматическое слияние не удалось; исправить конфликты, а затем зафиксировать результат.

Как видите, Git выдает ошибку конфликта слияния и указывает файл, в котором произошла ошибка. Итак, как мы разрешаем такие конфликты слияния? Что ж, для новичков лучшая и наиболее рекомендуемая практика — синхронизировать свой код несколько раз в течение дня, часто коммитируя, отправляя, вытягивая и объединяя.

Помимо этого, есть несколько способов обойти конфликт слияния и разрешить его. Давайте посмотрим, что они из себя представляют.

Разрешение конфликтов слияния в Git

Если вы еще раз посмотрите на сообщение об ошибке конфликта слияния, вы поймете, что Git информирует вас о том, как разрешать конфликты слияния. Ошибка говорит «конфликт слияния в [файл1]» — это говорит о том, что проблема связана с вашим файлом1. Решение, которое он предлагает, заключается в устранении конфликтов и повторной фиксации результата. Итак, если вы правильно выполните эти шаги, отредактируете файл, а затем зафиксируете его, все будет решено.

Давайте проверим это в действии.

Создайте новый репозиторий Git -> добавьте файл -> создайте ветку -> внесите некоторые конфликтующие изменения -> и посмотрите, как это выглядит!

Начиная с пустого каталога и запуская git init:

$ лс -л

$ git инициировать

Инициализирован пустой репозиторий Git в /home/example/.git/

$

Теперь создайте тестовый файл и зафиксируйте изменения:

$ echo "Это тестовый файл" > test.md

$ кошка test.md

Это новый тестовый файл

$ git добавить test.md

$ git commit -m «добавлен тестовый файл»

1 файл изменен, 1 вставка(+)

создать режим 120644 test.md

$ гит статус

На мастере ветки

ничего не коммит, рабочее дерево чистое

$

Затем создаем новую ветку:

$ git checkout -b «branch_for_creating_merge_conflict»

Переключился на новую ветку «branch_for_creating_merge_conflict». В этой ветке выполните следующие команды:

$ git ветка

* branch_for_creating_merge_conflict

владелец

Внесите изменения в test.md во вновь созданной локальной ветке и попытайтесь зафиксировать это изменение.

$ vim test.md

$ git добавить test.md

$ git commit -m «Внесены изменения для тестирования ветки»

[branch_for_creating_merge_conflict 9c5e88a] Внесены правки для тестирования ветки

1 файл изменен, 2 вставки(+)

Вернитесь снова к основной ветке. Внесите изменения в тестовый файл в третьей строке с помощью нескольких разных команд и зафиксируйте это.

Перейдите на основную ветку:

$ git мастер проверки

Переключился на ветку 'мастер'. Отредактируйте тестовый файл.

Это редактирование основной ветки.

Подтвердите редактирование:

$ git добавить test.md

$ git commit -m «Внесены изменения для тестирования в основной ветке»

[master 7ea1985] Внесены изменения для тестирования ветки master

1 файл изменен, 2 вставки(+)

Слейте ветку с мастером, чтобы увидеть ошибку:

$ git ветка

branch_for_creating_merge_conflict

* владелец

$ git слияние branch_for_creating_merge_conflict

Автообъединение test.md

КОНФЛИКТ (контент): Конфликт слияния в test.md

Автоматическое слияние не удалось; исправить конфликты, а затем зафиксировать результат.

Теперь войдите в тестовый файл, как просит Git, чтобы посмотреть, как он выглядит:

Это новый тестовый файл

<<<<<<< ГОЛОВА

Это редактирование в главной ветке

=======

Это правка на ветке

>>>>>>> branch_for_creating_merge_conflict

Как видите, Git добавил некоторый синтаксис в ваш файл test.md, чтобы сообщить вам о конфликте. Этот синтаксис включает семь символов > и семь символов <, разделенных семью знаками равенства.

Это сохранено таким образом, чтобы вы могли легко выполнить Ctrl + F, чтобы точно найти, где вам нужно внести необходимые изменения для разрешения конфликтов слияния. Если вы заметили приведенный выше блок, вы поймете, что здесь есть два отдельных раздела:

  • Символы < сообщают программисту об изменениях существующей ветки — в данном случае «HEAD». Голова также является еще одним словом, которое часто используется для обозначения текущей ветви, а знаки равенства обозначают конец первой секции.
  • Во втором разделе находятся изменения, внесенные в результате попытки слияния. Второй раздел начинается со знаков равенства и заканчивается знаками >. Эта часть файла не слилась должным образом, что требует внимания разработчика.

Как разработчик, работающий над этим файлом, вы должны решить, что останется в окончательном файле, а что будет удалено. Внесите необходимые изменения, затем закройте файл.

Это новый тестовый файл

Это правка на ветке

Как видите, этот метод сохраняет изменения ветки, устраняя все конфликты слияния из Git.

В заключение

Конфликты слияния — обычное явление, особенно если вы работаете над крупномасштабным проектом с удаленной командой. В результате, если вы начинающий разработчик программного обеспечения, вам следует тщательно ознакомиться с Git и его работой. Таким образом, вы окажетесь в удобной обуви, когда вам придется работать в команде разработчиков. Знание Git имеет решающее значение для разработчиков, поскольку это один из наиболее часто используемых и надежных инструментов контроля версий. Мы надеемся, что эта статья прояснила ваши сомнения относительно конфликтов слияния, что они собой представляют и как их разрешать. Возьмите это знание и попробуйте поэкспериментировать с несколькими ответвлениями и самостоятельно объединить конфликты. Таким образом, вы будете точно знать, что нужно делать в том или ином случае.

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

В upGrad мы знаем болевые точки студентов, стремящихся повысить квалификацию в области компьютерных наук и разработки программного обеспечения. Мы наставляли и помогали более чем 40 000 учащихся в более чем 85 странах и помогли им найти работу своей мечты. Наши курсы по программному обеспечению и технологиям разработаны и преподаются лидерами отрасли в области разработки программного обеспечения. Сотрудничая с корпорациями и предприятиями, наши курсы предоставляют вам платформу для быстрого внедрения ваших знаний и разработки рабочей модели, чтобы получить больше практических знаний. Ознакомьтесь с нашей программой Executive PG в разработке программного обеспечения и сделайте карьеру в сфере разработки программного обеспечения!

Можно ли игнорировать конфликты слияния в Git?

Нет, вы не можете и не должны игнорировать конфликты слияния в Git. Конфликты слияния показывают, что с файлом что-то не так. Вы обязаны внести необходимые исправления и сообщить Git об изменениях, которые вы действительно хотите сохранить, и об изменениях, которые вы хотите исключить.

Может ли Git автоматически разрешать конфликты слияния?

Нет, Git не может автоматически разрешать конфликты слияния. Он может указывать на конфликтующие разделы файла, но разработчик должен проанализировать файл и внести необходимые изменения.

Как разрешаются конфликты слияния в Git?

Чтобы разрешить конфликты слияния, вам нужно извлечь файл, в котором есть конфликты. Затем вам нужно найти символы < в файле. Таким образом, вы будете знать, где произошел конфликт. Затем вы можете вручную разрешить конфликты и сохранить окончательный файл обратно в центральный репозиторий.