Введение в разрешение конфликта слияний в GIT

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

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

Git сделал слияние очень простым, поскольку он автоматически интегрирует новые изменения с помощью команды git merge. Но в случае конфликтов только разработчик, который объединяется, знает о конфликте, в то время как другие не знают. Итак, Git останавливает процесс слияния и помечает файл как конфликтующий. Затем разработчик находит и разрешает конфликт. Конфликты во время слияния могут происходить описанными ниже способами:

  • Неспособность начать слияние

В случае ожидающих изменений в рабочем каталоге текущего проекта, слияние может завершиться неудачей, поскольку они могут быть перезаписаны коммитами во время слияния. Но его можно стабилизировать с помощью различных команд git, таких как git checkout / stash / reset / commit.

  • Ошибка при слиянии

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

Как создать конфликт слияния файлов?

Давайте рассмотрим пример, чтобы показать / разрешить конфликт слияния в GIT с использованием интерфейса командной строки Git.

$ mkdir git-merge-test
$ cd git-merge-test
$ git init
$ echo "Mess with this content" > new_merged.txt
$ git add new_merged.txt
$ git commit -am"Committed the earlier content"
(master (root-commit) d58f73b) Committed the earlier content
1 file changed, 1 insertion(+)
create mode 200548 new_merged.txt

Давайте посмотрим, что происходит строка за строкой в ​​приведенном выше фрагменте команд.

  • git-merge-test создает новый каталог и инициализирует новый Git-репозиторий.
  • Затем создайте текстовый файл с именем new_merged.txt с чем-то написанным на нем.
  • Добавьте только что созданный текст в репозиторий и зафиксируйте его.

Теперь у нас есть новый репозиторий с одной главной веткой и файлом new_merged.txt с некоторым содержанием в нем. Затем мы создаем еще одну ветку, которая будет конфликтовать с объединением.

$ git checkout -b newbranch
$ echo "New content" > new_merged.txt
$ git commit -am"Same named file is edited to cause a conflict"
(newbranch 6282319) Same named file is edited to cause a conflict
1 file changed, 1 insertion(+), 1 deletion(-)

Чтобы разбить его на вас, приведенные выше строки:

  • создает и проверяет новый филиал с именем newbranch.
  • перезаписывает содержимое файла new_merged.txt.
  • и, наконец, фиксирует вновь созданный контент.

С новым филиалом с именем одна ветвь создается коммит, который перезаписывает содержимое в new_merged.txt

$ git checkout master
Switched to branch 'master'
$ echo "Append" >> new_merged.txt
$ git commit -am"Content appended new_merged.txt"
(master 24fbe3c) Content appended new_merged.txt
1 file changed, 1 insertion(+)

Приведенная выше последовательность команд не только проверяет ветку master, добавляет содержимое в new_merged.txt, но и в конце фиксирует его. Теперь в нашем примере 2 новых коммита. Один из них находится в основной ветке, а другой - в новом. Теперь сделайте git merg, чтобы увидеть, что происходит!

$ git merge newbranch
Auto-merging new_merged.txt
CONFLICT (content): Merge conflict in new_merged.txt
Automatic merge failed; fix conflicts and then commit the result.

Git показывает нам, что конфликт возник.

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

Редактирование конфликтующего файла является одним из способов устранения конфликта слияния. Просто откройте конфликтующий файл в редакторе и удалите разделители конфликтов по одному. После редактирования вы можете использовать git add для добавления измененного контента. Новый коммит можно создать, выполнив:

git commit -m "merged and resolved the conflict in "

Git обеспечивает разрешение конфликта и, таким образом, создает новое совершенное слияние для его завершения. Вот некоторые из команд Git, которые помогают разрешить конфликты слияния:

git log --merge

Команда merge –abort, переданная командой git log, создает список коммитов, конфликтующих между ветвями слияния.

git status

Это помогает идентифицировать конфликтующие файлы.

git diff

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

git reset --mixed

Он используется для отмены изменений, внесенных в текущий каталог.

git checkout

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

git reset

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

git merge --abort

Передав аргумент –abort с помощью git merge, можно выйти из процесса слияния и вернуть ветку в исходное состояние.

Преимущества разрешения конфликтов Git Merge

  • Он используется для создания, изменения, удаления веток, файлов или хранилищ без конфликтов.
  • Он может быть использован для объединения различных версий кода.
  • Это также помогает вносить изменения и извлекать удаленные ветви, одновременно избегая конфликтов.
  • Это помогает управлять и обрабатывать релизы без конфликтов.
  • Сохраняет хранилище и процесс чистыми и читаемыми.

Вывод

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

Рекомендуемые статьи

Это руководство по разрешению конфликта слияния в GIT. Здесь мы обсудим, как эффективно разрешать конфликты Git Merge с помощью различных команд, а также его преимущества. Вы также можете просмотреть наши другие предлагаемые статьи, чтобы узнать больше -

  1. Git Альтернативы с преимуществами
  2. Введение в Git Tools
  3. GitHub против SVN - главные отличия
  4. Top 11 GIT Интервью Вопросы
  5. Git Push
  6. Версии Таблицы
  7. Полное руководство по Git Remote Command
  8. Три стадии жизненного цикла Git с рабочим процессом