Git Merge

  1. Snel vooruit git merge
  2. recursieve git merge
  3. Conflicten oplossen

We zullen leren hoe we branches kunnen samenvoegen en ook kunnen omgaan met conflicten als het in deze tutorial bestaat.

Wat we in de laatste tutorial hebben gedaan, is dat we een nieuwe branch hebben gemaakt om aan enkele nieuwe functies te werken die we niet willen verprutsen master.

Nadat we deze nieuwe filialen hebben gemaakt en tevreden zijn met de nieuwe functies, moeten we deze weer in de master filiaal samenvoegen . Zodat wanneer we de volgende releasecode publiceren, de nieuwe functie ook is opgenomen.

Snel vooruit git merge

Laten we zeggen dat we blij zijn met de wijzigingen in de new_test_branch vertakking en we zullen het terugvoegen naar de master.

  • Bekijk master tak
    $ git checkout master
    
  • Voeg de tak samen met de master
    $ git merge new_test_branch
    Updating 5fef94e..e7a7e81
    Fast-forward
    test3.txt | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)
    

We hebben de functie uit de branch gehaald new_test_branch en samengevoegd in deze master branch.

Het Fast-forward getoonde in het bericht na het samenvoegen betekent dat git snel doorgaat naar de codewijzigingen die we in de vertakking hebben aangebracht, omdat we in de tijd tussen het aftakken en het opnieuw samenvoegen in de master, eigenlijk geen wijzigingen hebben aangebracht in de master tak.

recursieve git merge

Voordat we deze verschillende tonen git merge , moeten we twee takken te maken test_branch_A en test_branch_B en maak een aantal veranderingen aan hen. Dan zullen we de test_branch_A rug naar de master tak samenvoegen.

Nu zullen we samengaan test_branch_B met de master.

$ git merge test_branch_B
Merge made by the 'recursive' strategy.
 test1_rename.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Het verschil tussen deze samenvoeging en fast-forward samenvoeging is dat de samenvoeging wordt gemaakt door de recursieve strategie omdat deze filiaalcode geen functie bevat test_branch_A . Met andere woorden, de master tak is gewijzigd nadat de tak test_branch_B is gemaakt.

Nu master is het up-to-date met deze twee functies, en het maakt niet uit dat we er tegelijkertijd aan hebben gewerkt, verschillende mensen die ze met beide doen, voegen ze gewoon weer samen en alles is in orde.

Conflicten oplossen

Wat we hebben gewijzigd in twee testtakken heeft geen conflict, maar wat als er conflicten zijn wanneer u enkele takken samenvoegt met de master ?

Laten we twee branches maken test_branch_C en test_branch_D vervolgens tekst toevoegen The letter should be C aan het bestand test3.txt in branch test_branch_C en tekst toevoegen The letter should be D aan het bestand test3.txt in branch test_branch_D.

Dan voegen we de test_branch_C rug in de master tak.

Nu gaan we over test_branch_D in de master ,

$ git merge test_branch_D
Auto-merging test3.txt
CONFLICT (content): Merge conflict in test3.txt
Automatic merge failed; fix conflicts and then commit the result.

Je kon hier zien dat het niet succesvol kon worden samengevoegd omdat het het conflict in het bestand detecteert test3.txt . We moeten het conflict handmatig oplossen door het conflicterende bestand te bewerken.

Het bestand test3.txt toont het conflict als

<<<<<<< HEAD
The letter should be C
=======
The letter should be D
>>>>>>> test_branch_D

De tekst tussen HEAD en ======= is de tekst in de master vertakking die afkomstig is van de samengevoegde vertakking test_branch_C , die verschilt van de tekst in de te samenvoegen vertakking test_branch_D.

U moet kiezen welke tekst in de tekst moet blijven master en alle symbolen zoals <<<<< en verwijderen >>>>>.

Laten we zeggen dat de toegevoegde tekst zal zijn The letter should be D . We werken het conflicterende gebied bij om The letter should be D alleen te zijn.

Na het oplossen van het conflict kunnen we het opgeloste conflict begaan met behulp van git commit.