Въведение за разрешаване на конфликт на сливане в 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(+)

Горната последователност от команди не само проверява главния клон, добавя съдържание в new_merged.txt, но и го ангажира в крайна сметка. Сега нашият пример има 2 нови комита. Единият е в основния клон, а още един в новия клон. Сега git обединете новия клон, за да видите какво ще се случи!

$ 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 Conflicts

  • Използва се за създаване, промяна, изтриване на клонове, файлове или хранилища без конфликти.
  • Може да се използва за сливане на различни версии на кода.
  • Той също така помага да се правят промени и да се проверяват отдалечени клонове, като същевременно се избягват конфликти.
  • Той помага да се управлява и борави с версии без конфликти.
  • Поддържа хранилището и процеса чисти и четими.

заключение

Git има много приложения и се използва широко от разработчици, продуктови мениджъри и учени по данни. Git командите са много ефективни и могат да бъдат много полезни. Конфликт в git възниква, когато два различни клона се опитват да редактират един и същ ред във файл или файл се изтрива в определен клон, но редактиран в друг. Git обработва повечето от сливанията успешно със своите функции за сливане, но може да бъде разрешен и ръчно с помощта на инструменти като git status, git reset, git checkout и Git log.

Препоръчителни статии

Това е ръководство за разрешаване на конфликт на сливане в GIT. Тук обсъждаме как ефективно да разрешим Git Merge Conflicts с различни команди, заедно с неговите предимства. Можете да разгледате и другите ни предложени статии, за да научите повече -

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

Категория: