Git Merge

Git Merge

Izolovanje funkcije u različite grane je presudna praksa za svakog ozbiljnog programera. Odvajanjem svake funkcije, ispravke grešaka ili radnog eksperimenta izbeći ćete mnogo problema i održavati razvojne grane čistima.

U nekom trenutku, deo koda će dostići stanje u kojem ćete ga želeti integrisati sa ostatkom projekta. Ovde dolazi komanda git merge.

Priprema Za Merge

Pretpostavimo da želimo spojiti hitnu ispravku za granu u vašu glavnu granu.

Pre nego što započnemo, kako se uveriti da li ste spremni da spojite svoje promene?

  1. Proverite da li je vaše lokalno spremište u toku sa najnovijim promenama sa vašeg udaljenog servera pomoću git fetch.
  2. Jednom kada je preuzimanje završeno, git checkout master.
  3. Izvršite git pull osigurajte da glavna grana ima najnovija ažuriranja.
  4. Izdvajanje do grane koja bi trebalo da primi promene, u našem slučaju to je master.

Merging(Spajanje)

Kada su pripreme završene, možete započeti spajanje pomoću naredbe git merge hotfix.

Fast Forward Merge

Fast-forward merge može se desiti kada postoji linearna putanja između grana koje želimo da spojimo. Ako se master nije razišao, umesto da kreira novi commit, on će samo usmeriti master na najnoviji commit grane hitnih ispravki. Sve promene iz grane hitnih ispravki sada su dostupne u masteru.
alt
Međutim, fast-forward-merge nije moguće ako su se grane razišle. U ovom slučaju želite da koristite trosmerno spajanje.

Trosmerno Spajanje

Kada ne postoji linearna putanja do ciljne grane, Git nema drugog izbora već da ih kombinuje trosmernim spajanjem. Ovo spajanje koristi dodatni angažman da poveže dve grane.
alt

Testirajte ovo! Kreirajte svoj projekat sa granom RSpec test i istovremeno uredite testove kontrolera u masteru. Pokušajte sada da se spojite.

Kako Rešiti Konflikte Pri Spajanju

Do konflikata spajanja dolazi kada su dve grane koje pokušavate da spojite izmenile isti deo iste datoteke, Git neće moći da shvati koju verziju da koristi.

Na primer, ako je datoteka example.rb uređivana u istim redovima u različitim granama istog Git spremišta ili ako je datoteka izbrisana, dobićete grešku u konfliktu spajanja kada pokušate da spojite ove grane. Pre nego što nastavite, konflikt spajanja mora biti rešen novim commitom.

Do konflikta spajanja će doći samo u slučaju trosmernog spajanja.

1.Generišite listu datoteka koje treba rešiti: git status

# On branch master
# You have unmerged paths.
#   (fix conflicts and run "git commit")
# Unmerged paths:
#   (use "git add ..." to mark resolution)
# both modified: example.rb
# no changes added to commit (use "git add" and/or "git commit -a")

2.Kada se naiđe na liniju konflikta, Git će urediti sadržaj pogođenih datoteka vizuelnim indikatorima koji obeležavaju obe strane sukobljenog sadržaja. Ovi vizuelni markeri su:

  • <<<<<<< - Označivač konflikta, sukob počinje nakon ove linije.
  • ======= - deli vaše promene od promena u drugoj grani.
  • >>>>>>> - Kraj konfliktnih linija.
<<<<<<< HEAD(master)
conflicted text from HEAD(master)
=======
conflicted text from hotfix
>>>>>>> hotfix
  1. Odlučite da li želite da zadržite samo hitne ispravke ili glavne promene ili napišite potpuno novi kod. Izbrišite markere sukoba pre spajanja promena.
  2. Kada ste spremni za spajanje, sve što treba da uradite je da pokrenete git add komandu na konfliktnim datotekama kako biste rekli Git-u da su rešeni.
  3. Commit-ujte svoje promene pomoću git commit da biste generisali comiit spajanja.

Nadam se da vam je ovo pomoglo da bolje razumete kako da spojite svoje grane i rešite konflikte.

Kada se pretplatite, automatski vam donosimo nove članke!