Hoe Git Merge te gebruiken

Dec 31, 2024
Programmeren

Git gebruikt takken om ontwikkelingsstromen te isoleren, om te voorkomen dat de stabiele releasetak vervuild wordt. Werk in een tak naar de hoofdstroom brengen betekent takken samenvoegen. Hier is hoe je het doet.

Wat is een samenvoeging in git?
Voorbereiden om een tak in git samen te voegen
Een fusie uitvoeren
Een fast-forward fusie uitvoeren in git
Hoe u samenvoegconflicten in git kunt oplossen
Alles gaat uiteindelijk samen

Wat is een samenvoeging in git?

Git is ontworpen om vertakking eenvoudig en snel te maken. In tegenstelling tot andere versiebeheersystemen is vertakking op git een triviale materie. Vooral bij multi-ontwikkelaarsprojecten is vertakking een van Git's kernorganisatietools.

Takken Sandbox Nieuwe ontwikkelingsinspanningen zodat code kan worden gewijzigd of toegevoegd zonder de code in andere takken, met name de hoofd- of mastertak, te beïnvloeden. Dit bevat meestal de stabiele versie van uw codebasis.

Het isoleren van deze wijzigingen van uw stabiele codeversie is volkomen logisch. Maar vroeg of laat zal de nieuwe code worden getest, beoordeeld en met rubber gestempeld om in de mastertak te worden gerold. Op dat moment moet u uw tak samenvoegen in de mastertak.

Eigenlijk kunnen takken sub-branches hebben, zodat u uw tak mogelijk in een andere tak in plaats van de mastertak kunt samenvoegen. Vergeet niet dat fuses altijd één tak nemen en deze samenvoegen tot een doel tak, wat die tak ook is. Als u uw master -tak in een andere tak wilt samenvoegen, kunt u dat zelfs ook doen.

Zoals de meeste acties in GIT, voert u samenvoeging in uw plaatselijke repository uit en duwt u ze naar uw externe repository.

Voorbereiden om een tak in git samen te voegen

We hebben een klein ontwikkelingsproject met een lokale Git -repository en een externe GIT -repository. We hebben een tak gemaakt met de naam "Bugfix14" van de "master" -tak en werkten aan een oplossing voor een bug.

Dat werk is voltooid en we hebben onze code getest. Het werkt allemaal zoals verwacht. We willen die wijzigingen in de mastertak rollen, zodat onze oplossing deel uitmaakt van de volgende release van de software.

Er is een beetje voorbereiding te doen voordat we het samenvoegen uitvoeren. We moeten ervoor zorgen dat de doeltak - in dit geval de "master" -tak - en de tak die we erin gaan samenvoegen, beide up -to -date zijn.

  • Op Branch Bugfix14 : Dit is onze huidige tak.
  • Uw filiaal is up -to -date met ‘Origin/Bugfix’ : De branch in onze lokale repository heeft dezelfde commit -geschiedenis als de tak in de externe repository. Dat betekent dat ze identiek zijn.
  • Niets om te plegen Er zijn geen wijzigingen in het ensceneringsgebied die niet zijn gepleegd.
  • Werkboom schoon : Er zijn geen niet -statige wijzigingen in de werkmap.

Al die geven aan dat de tak up -to -date is en we zijn duidelijk om door te gaan. Als een van deze aangaf dat er veranderingen bestonden, zouden we ze moeten organiseren, plegen en naar de afstandsbediening duwen. Als iemand anders aan deze bestanden had gewerkt, moeten we mogelijk hun wijzigingen uit de externe repository halen.

Het bekijken van de tak die we gaan samenvoegen om het samenvoegproces te vereenvoudigen. Het stelt ons ook in staat om te verifiëren dat het up -to -date is. Laten we eens kijken naar de Master Branch.

We krijgen dezelfde bevestigingen dat de "master" -tak up -to -date is.

VERWANT: Hoe de Git Workflow te kiezen & amp; Vertakkingsmodel dat geschikt is voor uw team

Een fusie uitvoeren

De tak "Bugfix14" was vertakt van de "master" -tak. Er is een verbintenis geweest voor de "master" -tak nadat de "Bugfix14" -tak is gemaakt. Er zijn een paar commits geweest bij de "Bugfix14" -tak.

We hebben ervoor gezorgd dat onze twee vestigingen up -to -date zijn en we hebben de "Master" -tak bekeken. We kunnen de opdracht uitgeven om de tak "Bugfix14" in de "master" -tak samen te voegen.

De samenvoeging vindt plaats. De "Bugfix14" -tak bestaat nog steeds, maar nu zijn de veranderingen die in die tak zijn aangebracht samengevoegd in de "master" -tak.

In dit geval voert de opdracht samenvoegen een drieweg samenvoegen . Er zijn slechts twee takken, maar er zijn drie commits bij betrokken. Ze zijn het hoofd van beide takken, en een derde commit die de samenvoegactie zelf vertegenwoordigt.

Om onze externe repository bij te werken, kunnen we de git duw commando.

Sommige mensen verwijderen de voorkeur aan zijtakken zodra ze ze hebben samengevoegd. Anderen zorgen ervoor dat ze behouden als een verslag van de echte ontwikkelingsgeschiedenis van het project.

Als u de branch wilt verwijderen, kunt u dit doen met behulp van de Git Branch commando met de -D (Optie verwijderen).

Naar Verwijder de tak Gebruik in de externe repository deze opdracht:

Je zult een lineaire commit -geschiedenis hebben, maar het zal niet de ware geschiedenis zijn.

VERWANT: Hoe Git -vestigingen te verwijderen op lokale en afgelegen repositories

Een fast-forward fusie uitvoeren in git

Als je geen commits hebt gedaan naar de "master" -tak, zal je geschiedenis er zo uitzien. Het zal er ook uitzien als je dat hebt gedaan herbegrepen Uw ontwikkelingstak zodat deze is bevestigd aan het einde van de "master" -tak.

Omdat er geen commits zijn in de "Master" -tak, om de "Bugfix15" -tak samen te voegen, is het enige dat Git hoeft te doen de "Master" -hoofdaanwijzer te wijzen op de laatste commit van de "Bugfix15" -tak.

Git zal een fast-forward samenvoegen Wanneer het kan . Als de commissie van de "master" -tak betekent dat een fast-forward samenvoeging niet mogelijk is, zal Git een drieweg samenvoegen .

Je kunt het niet kracht Een fast-forward samenvoeging-het is misschien niet mogelijk-maar je kunt verklaren dat het snel vooruitgaat of niets zal samenvoegen. Er is een optie die Git instrueert om een snel-forward samenvoeging te gebruiken als het kan, maar niet om een drieweg te menken als dit niet kan. De optie is -alleen (Fast-forward alleen samenvoegen).

Dit combineert de "Bugfix15" -tak in de "master" -tak, maar alleen als een fast-forward fusie mogelijk is.

In dit geval zijn er commits geweest voor de "master" -tak, dus een fast-forward fusie is niet mogelijk.

Hoe u samenvoegconflicten in git kunt oplossen

Als dezelfde delen van hetzelfde bestand in beide takken zijn gewijzigd, kunnen de takken niet worden samengevoegd. Menselijke interactie is vereist om de conflicterende bewerkingen op te lossen.

Hier hebben we wijzigingen aangebracht in een bestand met de naam "ROT.C" in een filiaal genaamd "Bugfix17" die we willen samenvoegen aan de "Master" -tak. Maar "rot.c" is ook gewijzigd in de "master" -tak.

Wanneer we het proberen samen te voegen, krijgen we een waarschuwing dat er conflicten zijn. Git vermeldt de conflicterende bestanden en vertelt ons dat de samenvoeging is mislukt. We kunnen zich volledig terugtrekken -ABORT keuze:

Maar het oplossen van fusies is niet zo eng als het klinkt. Git heeft wat werk gedaan om ons te helpen. Als we een van de conflicterende bestanden bewerken - in ons geval hebben we er maar één - vinden we de conflicterende codenecties die voor ons zijn gemarkeerd.

Elk conflict wordt begrensd door zeven minder dan personages “ & lt; & lt; & lt; & lt; & lt; & lt; & lt; 'En zeven meer dan meer dan karakters' & gt; & gt; & gt; & gt; & gt; & gt; & gt; ", Met zeven gelijken tekenen" ======== " tussen hen.

  • De code boven de borden is van de tak die u samenvoegt naar binnen .
  • De onderstaande code is het teken van het gelijken van de code van de branch die u probeert samenvoegen .

U kunt eenvoudig zoeken naar een van de sets van zeven tekens en van conflicten naar conflicten via uw dossier gaan. Voor elk conflict moet je kiezen welke set bewerkingen je gaat houden. U moet de code bewerken die u afwijst, en de zevenkarakterlijnen die Git heeft toegevoegd.

We gaan de code bij de "Bugfix17" -tak bewaren. Na het bewerken ziet ons bestand er zo uit.

We kunnen nu doorgaan met de samenvoeging. Maar merk op, we gebruiken de verbinden commando om dit te doen, niet de samenvoegen commando.

We begaan de wijziging door het bestand te organiseren en zoals gewoonlijk te plegen. We zullen de status controleren voordat we de laatste commit maken.

De samenvoeging is voltooid. We kunnen dit nu naar onze externe repository pushen.

VERWANT: Hoe u Git Commits kunt repareren, bewerken of ongedaan maken (GIT -geschiedenis veranderen)

Alles gaat uiteindelijk samen

Alle takken moeten uiteindelijk worden samengevoegd, zodat de veranderingen in hen niet wees worden en vergeten.

Het samenvoegen van vestigingen is eenvoudig, maar omgaan met conflicten kan ingewikkeld worden in drukke, grotere teams. Het oplossen van conflicten kan input van elke ontwikkelaar vereisen om uit te leggen wat hun code doet en waarom ze hun wijzigingen hebben aangebracht. U moet dat begrijpen voordat u een weloverwogen beslissing kunt nemen over welke bewerkingen u moet bewaren.

  • Hoe u een tak in Git kunt hernoemen
  • Hoe u een externe git -branch afrekent
  • Hoe je veranderingen in git kunt opbergen
  • Hoe u van takken in GitHub kunt wisselen
  • Git Rebase: alles wat je moet weten
  • De OnePlus 11 is hier, maar met een ruwe start
  • Microsoft Edge krijgt een AI -chat en een nieuwe look op Windows
  • De beste oordopjes voor iPhone -fans raken gewoon hun laagste prijs

Programmeren - Meest populaire artikelen

Hoe u een tak in Git kunt hernoemen

Programmeren Dec 19, 2024

Vertakken is een triviale oefening in git. Helaas krijgen triviale taken zelden de nodige aandacht en gebeuren er fouten. Als je een tak verkeerd hebt genoemd, moet deze worden omgedoopt. Hier ..


Categorieën