Как да разрешаваме конфликти при сливане в Git
Как да разрешавам конфликти при сливане в Git?
4577
3
Как да разрешавам конфликти при сливане в Git?
Опитайте:
git mergetool
Отваря се графичен потребителски интерфейс, който ви превежда през всеки конфликт и ви дава възможност да изберете начина на сливане. Понякога изисква малко ръчно редактиране след това, но обикновено е достатъчно само по себе си. Със сигурност е много по-добре, отколкото да правите всичко на ръка.
Според коментара на @JoshGlover:
Командата не отваря задължително графичен потребителски интерфейс, освен ако не инсталирате такъв. Изпълнението на
git mergetool
за мен доведе до използването наvimdiff
. Можете да инсталирате един от следните инструменти, за да го използвате вместо него:meld
,opendiff
,kdiff3
,tkdiff
,xxdiff
,tortoisemerge
,gvimdiff
,diffuse
,ecmerge
,p4merge
,araxis
,vimdiff
,emerge
.По-долу е показана примерна процедура за използване на
vimdiff
за разрешаване на конфликти при сливане. Въз основа на този линкСтъпка 1: Изпълнете следните команди в терминала си
Това ще зададе vimdiff като инструмент за сливане по подразбиране.
Стъпка 2: Изпълнете следната команда в терминала
Стъпка 3: Ще видите изображение на vimdiff в следния формат
Тези 4 изгледа са
Можете да навигирате между тези изгледи, като използвате ctrl+w. Можете да достигнете директно до изгледа MERGED, като използвате ctrl+w, последван от j.
Повече информация за навигацията vimdiff тук и тук
Стъпка 4. Можете да редактирате изгледа MERGED по следния начин
Ако искате да получите промените от REMOTE
Ако искате да получите промени от BASE
Ако искате да получите промени от LOCAL
Стъпка 5. Запазване, излизане, ангажиране и почистване
:wqa
запазване и излизане от vigit commit -m "message"
git clean
Премахване на допълнителни файлове (например *.orig), създадени от инструмента за различаване.Определете кои файлове са в конфликт (Git трябва да ви каже това).
Отворете всеки файл и разгледайте различията; Git ги разграничава. Надяваме се, че ще е очевидно коя версия на всеки блок да запазите. Може да се наложи да го обсъдите с колегите разработчици, които са предали кода.
След като сте разрешили конфликта в даден файл,
git add the_file
.След като сте разрешили всички конфликти, направете
git rebase --continue
или друга команда. Git е казал да направите, когато сте приключили.Ако често правите малки поправки, започнете да преглеждате коментарите на поправките с
git log --merge
. След товаgit diff
ще ви покаже конфликтите.За конфликти, които включват повече от няколко реда, е по-лесно да видите какво се случва с външен инструмент с графичен потребителски интерфейс. Харесвам opendiff -- Git също така поддържа vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff, emerge out of the box, а можете да инсталирате и други:
git config merge.tool "your.tool"
ще зададе избрания от вас инструмент и след товаgit mergetool
след неуспешно сливане ще ви покаже разликите в контекст.Всеки път, когато редактирате файл, за да разрешите конфликт,
git add filename
ще актуализира индекса и вашето различие вече няма да го показва. Когато всички конфликти са обработени и техните файлове са добавени,git commit
ще завърши сливането.