Kā atrisināt apvienošanas konfliktus sistēmā Git

Kā Git sistēmā atrisināt apvienošanas konfliktus?

Risinājums

Izmēģiniet: git mergetool

Tā atver GUI, kas veic soļus cauri katram konfliktam, un jūs varat izvēlēties, kā veikt apvienošanu. Dažreiz pēc tam ir nepieciešama neliela rediģēšana ar rokām, bet parasti ar to pietiek. Tas noteikti ir daudz labāk, nekā to darīt visu ar rokām.

Saskaņā ar @JoshGlover komentāru:

Komanda ne vienmēr atver GUI, ja vien jūs to neesat instalējis. Man, palaižot git mergetool, tika izmantots vimdiff. Lai to izmantotu, varat instalēt kādu no šiem rīkiem: meld, opendiff, kdiff3, tkdiff, xxdiff, tortoisemerge, gvimdiff, diffuse, ecmerge, p4merge, araxis, vimdiff, emerge.

Zemāk ir parādīta parauga procedūra, kā izmantot vimdiff, lai atrisinātu apvienošanas konfliktus. Pamatojoties uz šo saiti

1. solis: Palaidiet terminālī šādas komandas

git config merge.tool vimdiff
git config merge.conflictstyle diff3
git config mergetool.prompt false

Tas iestatīs vimdiff kā noklusējuma apvienošanas rīku.

2. solis: Palaidiet terminālī šādu komandu

git mergetool

3. solis: Jūs redzēsiet vimdiff displeju šādā formātā

  ╔═══════╦══════╦════════╗
  ║       ║      ║        ║
  ║ LOCAL ║ BASE ║ REMOTE ║
  ║       ║      ║        ║
  ╠═══════╩══════╩════════╣
  ║                       ║
  ║        MERGED         ║
  ║                       ║
  ╚═══════════════════════╝

Šie 4 skati ir

LOCAL - tas ir pašreizējā atzara fails

BASE - kopējais priekštece, kā fails izskatījās pirms abām izmaiņām

REMOTE - fails, ko apvienojat savā zarā

MERGED - apvienošanas rezultāts, tas tiek saglabāts repozitorijā

Jūs varat pārvietoties starp šiem skatiem, izmantojot ctrl+w. Uz MERGED skatījumu var tieši nokļūt, izmantojot ctrl+w, kam seko j.

Vairāk informācijas par vimdiff navigāciju šeit un šeit.

4. solis. Jūs varētu rediģēt MERGED skatījumu šādā veidā

Ja vēlaties saņemt izmaiņas no REMOTE

:diffg RE  

Ja vēlaties saņemt izmaiņas no BASE

:diffg BA  

Ja vēlaties saņemt izmaiņas no LOCAL

:diffg LO 

5. solis. Saglabājiet, izejiet, izpildiet un sakārtojiet

:wqa saglabājiet un izejiet no vi

git commit -m "message"

git clean Noņemiet papildu failus (piemēram, *.orig), ko radījis diff rīks.

Komentāri (20)
  1. Nosakiet, kuri faili ir konfliktā (Git vajadzētu to pateikt).

  2. Atveriet katru failu un pārbaudiet atšķirības; Git tās norobežo. Cerams, ka būs skaidrs, kuru katra bloka versiju saglabāt. Iespējams, jums būs nepieciešams to apspriest ar kolēģiem izstrādātājiem, kas nodevuši kodu.

  3. Kad esat atrisinājis konfliktu kādā failā, git add the_file.

  4. Kad esat atrisinājis visus konfliktus, izpildiet git rebase --continue vai citu komandu. Git norādīja, ka to jādara, kad pabeidzāt.

Komentāri (7)

Ja bieži veicat nelielas izmaiņas, tad sāciet ar izmaiņu komentāru aplūkošanu, izmantojot git log --merge. Tad git diff parādīs jums konfliktus.

Konfliktiem, kas ietver vairāk nekā dažas rindiņas, ir vieglāk redzēt, kas notiek, izmantojot kādu ārēju GUI rīku. Man patīk opendiff -- Git atbalsta arī vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff, emerge, un jūs varat instalēt citus: Pēc neveiksmīgas apvienošanas git config merge.tool "your.tool" iestatīs jūsu izvēlēto rīku, un pēc neveiksmīgas apvienošanas git mergetool parādīs jums atšķirības kontekstā.

Katru reizi, kad rediģējat failu, lai atrisinātu konfliktu, git add filename atjauninās indeksu, un jūsu diff vairs netiks parādīts. Kad visi konflikti ir atrisināti un to faili ir git add-ēti, git commit pabeigs apvienošanu.

Komentāri (1)