Как разрешаются конфликты слияния в 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?