Kaip "Git" sistemoje išspręsti sujungimo konfliktus?
Pabandykite: git mergetool
Atveriama grafinė vartotojo sąsaja, kurioje aprašomas kiekvienas konfliktas, o jūs galite pasirinkti, kaip sujungti. Kartais po to reikia šiek tiek redaguoti rankomis, bet paprastai to pakanka. Tai tikrai daug geriau nei viską daryti rankomis.
Pagal @JoshGlover komentarą:
Komanda nebūtinai atidaro grafinę vartotojo sąsają, nebent ją įsidiegsite. Paleidus git mergetool
man buvo naudojama vimdiff
. Kad galėtumėte naudoti vietoj jos, galite įdiegti vieną iš toliau nurodytų įrankių: meld
, opendiff
, kdiff3
, tkdiff
, xxdiff
, tortoisemerge
, gvimdiff
, diffuse
, ecmerge
, p4merge
, araxis
, vimdiff
, emerge
.
Toliau pateikiama pavyzdinė procedūra, kaip naudoti vimdiff
sujungimo konfliktams spręsti. Remiantis šia nuoroda
1 etapas: Įvykdykite šias komandas terminale
git config merge.tool vimdiff
git config merge.conflictstyle diff3
git config mergetool.prompt false
Tai nustatys "vimdiff" kaip numatytąją suliejimo priemonę.
2 žingsnis: Įvykdykite šią komandą terminale
git mergetool
Trečias žingsnis: Pamatysite tokio formato vimdiff ekraną
╔═══════╦══════╦════════╗
║ ║ ║ ║
║ LOCAL ║ BASE ║ REMOTE ║
║ ║ ║ ║
╠═══════╩══════╩════════╣
║ ║
║ MERGED ║
║ ║
╚═══════════════════════╝
Šie 4 vaizdai yra
LOCAL - tai dabartinės šakos failas
BASE - bendras protėvis, kaip failas atrodė prieš abu pakeitimus
REMOTE - failas, kurį jungiate į savo šaką
MERGED - suliejimo rezultatas, tai, kas bus įrašyta į atliekyną
Tarp šių rodinių galite naršyti naudodami ctrl+w. Tiesiogiai į MERGED rodinį galite patekti naudodami ctrl+w, po kurio seka j.
Daugiau informacijos apie "vimdiff" navigaciją čia ir čia.
Žingsnis 4. MERGED vaizdą galite redaguoti taip
Jei norite gauti pakeitimus iš REMOTE
:diffg RE
Jei norite gauti pakeitimus iš BASE
:diffg BA
Jei norite gauti pakeitimus iš LOCAL
:diffg LO
5 žingsnis. Išsaugoti, išeiti, įsipareigoti ir sutvarkyti
:wqa
išsaugokite ir išeikite iš vi
git commit -m "message"
git clean
Pašalinkite papildomus failus (pvz., *.orig), sukurtus skirtumų įrankiu.
Nustatykite, kurie failai konfliktuoja (tai turėtų pasakyti "Git").
Atidarykite kiekvieną failą ir išnagrinėkite skirtumus; "Git" juos atskiria. Tikėkimės, kad bus akivaizdu, kurią kiekvieno bloko versiją išsaugoti. Gali tekti tai aptarti su kolegomis kūrėjais, kurie atidavė kodą.
Išsprendę failo konfliktą git add the_file
.
Išsprendę visus konfliktus, atlikite git rebase --continue
arba bet kurią kitą komandą.
Git liepė atlikti, kai baigėte.
Jei dažnai darote nedidelius pakeitimus, pradėkite nuo pakeitimų komentarų peržiūros naudodami git log --merge
. Tada git diff
parodys konfliktus.
Jei konfliktų yra daugiau nei kelios eilutės, lengviau pamatyti, kas vyksta, naudojant išorinę grafinės vartotojo sąsajos priemonę. Man patinka opendiff -- Git taip pat palaiko vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff, emerge iš karto, galite įsidiegti ir kitas: Įdiegus git config merge.tool "your.tool"
bus nustatytas pasirinktas įrankis, o po nepavykusio sujungimo git mergetool
parodys skirtumus kontekste.
Kiekvieną kartą redaguojant failą, kad išspręstumėte konfliktą, git add filename
atnaujins rodyklę ir jūsų skirtumai nebebus rodomi. Kai visi konfliktai bus išspręsti ir jų failai bus git add
redaguoti, git commit
užbaigs jūsų suliejimą.