Close

Git-branch

Dit document is een diepgaande evaluatie van de opdracht git branch en een bespreking van het algemene Git-branchingmodel. Branching is een functie die beschikbaar is in de meeste moderne versiebeheersystemen. Branching in andere VCS's kan een ingewikkelde operatie zijn, zowel qua tijd als qua schijfruimte. In Git maken branches deel uit van je dagelijkse ontwikkelingsproces. Git-branches zijn in feite een verwijzing naar een momentopname van je wijzigingen. Als je een nieuwe functie wilt toevoegen of een bug wilt verhelpen, hoe groot of hoe klein ook, dan maak je een nieuwe branch om je wijzigingen samen te vatten. Hierdoor wordt het gevaar bemoeilijkt dat instabiele code wordt samengevoegd in de belangrijkste codebasis, en krijg je de kans om de toekomstige geschiedenis op te schonen voordat je die samenvoegt met de main-branch.


Dit document is een diepgaande evaluatie van de opdracht git branch en een bespreking van het algemene Git-branchingmodel. Branching is een functie die beschikbaar is in de meeste moderne versiebeheersystemen. Branching in andere VCS's kan een ingewikkelde operatie zijn, zowel qua tijd als qua schijfruimte. In Git maken branches deel uit van je dagelijkse ontwikkelingsproces. Git-branches zijn in feite een verwijzing naar een momentopname van je wijzigingen. Als je een nieuwe functie wilt toevoegen of een bug wilt verhelpen, hoe groot of hoe klein ook, dan maak je een nieuwe branch om je wijzigingen samen te vatten. Hierdoor wordt het gevaar bemoeilijkt dat instabiele code wordt samengevoegd in de belangrijkste codebasis, en krijg je de kans om de toekomstige geschiedenis op te schonen voordat je die samenvoegt met de main-branch.

Git-branch
Consolevenster
gerelateerd materiaal

Uitgebreid Git log

Logo Bitbucket
Oplossing bekijken

Git leren met Bitbucket Cloud

Het bovenstaande diagram visualiseert een repository met twee geïsoleerde ontwikkelingslijnen, een voor een kleine functie en een voor een functie die langer draait. Door ze in branches te ontwikkelen, is het niet alleen mogelijk om ze allebei tegelijk te bewerken, maar blijft de main-branch ook vrij van dubieuze code.

De implementatie achter Git-branches is veel lichter dan andere modellen voor versiebeheer. In plaats van bestanden van map naar map te kopiëren, slaat Git een branch op als verwijzing naar een commit. In die zin is een branch het topje van een reeks commits: het is geen container voor commits. De geschiedenis van een branch wordt geëxtrapoleerd via de commit-relaties.

Onthoud terwijl je dit leest dat Git-branches anders zijn dan SVN-branches. SVN-branches worden alleen gebruikt om af en toe grootschalige ontwikkelingsinspanningen op te vangen, maar Git-branches vormen een integraal onderdeel van je dagelijkse workflow. Hieronder wordt verder ingegaan op de interne Git-branch-architectuur.

Hoe het werkt


Een branch representeert een onafhankelijke ontwikkelingslijn. Branches dienen als een abstractie voor het proces van bewerken/stagen/committen. Je kunt ze zien als een manier om een gloednieuwe werkmap, staginggebied en projectgeschiedenis aan te vragen. Nieuwe commits worden vastgelegd in de geschiedenis van de huidige branch. Dat levert een vertakking op in de geschiedenis van het project.

Met de opdracht git branch kun je branches aanmaken, vermelden, hernoemen en verwijderen. Hiermee kun je niet tussen branches schakelen of een vertakte geschiedenis weer samenvoegen. Daarom is git branch nauw geïntegreerd met de opdrachten git checkout en git merge.

Gemeenschappelijke opties


git branch

Maak een lijst van alle branches in je repository. Dit is synoniem voor git branch --list.

git branch <branch>

Maka een nieuwe branch genaamd <branch>. Hiermee wordt de nieuwe branch niet uitgecheckt.

git branch -d <branch>

Verwijder de opgegeven branch. Dit is een 'veilige' bewerking: Git voorkomt dat je de branch verwijdert als wijzigingen niet zijn samengevoegd.

git branch -D <branch>

Verwijder de opgegeven branch gedwongen, zelfs als de wijzigingen nog niet zijn samengevoegd. Deze opdracht moet je gebruiken als je alle commits die verband houden met een bepaalde ontwikkelingslijn voorgoed wilt weggooien.

git branch -m <branch>

Hernoem de huidige branch naar <branch>.

git branch -a

Maak een lijst van alle externe branches.

Branches aanmaken


Het is belangrijk om te begrijpen dat branches slechts pointers zijn naar commits. Wanneer je een branch aanmaakt, hoeft Git alleen maar een nieuwe pointer aan te maken. De repository wordt op geen enkele manier gewijzigd. Als je begint met een repository die er zo uitziet:

Repository zonder branches

Vervolgens maak je een branch aan met de volgende opdracht:

git branch crazy-experiment

De geschiedenis van de repository blijft ongewijzigd. Het enige wat erbij komt, is een nieuwe pointer naar de huidige commit:

Nieuwe branch aanmaken

Let op: hiermee wordt alleen de nieuwe branch aangemaakt. Om te beginnen met het toevoegen van commits, moet je deze selecteren met git checkout, en dan de standaardopdrachten git add en git commit gebruiken.

Externe branches maken


Tot nu toe hebben deze voorbeelden allemaal bewerkingen voor lokale branches aangetoond. De opdracht git branch werkt ook voor externe branches. Om bewerkingen op externe branches te kunnen uitvoeren, moet eerst een externe repo worden geconfigureerd en aan de configuratie van de lokale repo worden toegevoegd.

$ git remote add new-remote-repo https://bitbucket.com/user/repo.git
# Add remote repo to local repo config
$ git push <new-remote-repo> crazy-experiment~
# pushes the crazy-experiment branch to new-remote-repo

Deze opdracht pusht een kopie van de lokale branch crazy-experiment naar de externe repo .

Branches verwijderen


Als je klaar bent met werken aan een branch en deze in de hoofdcodebasis hebt samengevoegd, kun je de branch verwijderen zonder de geschiedenis te verliezen:

git branch -d crazy-experiment

Als de branch echter niet is samengevoegd, geeft de bovenstaande opdracht een foutmelding:

error: The branch 'crazy-experiment' is not fully merged. If you are sure you want to delete it, run 'git branch -D crazy-experiment'.

Dit voorkomt dat je toegang tot dat hele ontwikkelingsgebied verliest. Als je echt de branch wilt verwijderen (bijvoorbeeld omdat het een mislukt experiment is), kun je de hoofdletter -D gebruiken:

git branch -D crazy-experiment

Hiermee wordt de branch verwijderd, ongeacht de status en zonder waarschuwingen. Ga er dus verstandig mee om.

De vorige opdrachten verwijderen een lokale kopie van een branch. Het branch bestaat dan mogelijk nog steeds in externe repo's. Voer de volgende opdracht uit om een externe branch te verwijderen.

git push origin --delete crazy-experiment

of

git push origin :crazy-experiment

Er wordt dan een verwijderingssignaal naar de externe oorspronkelijke repository gestuurd, waardoor verwijdering van de externe branch crazy-experiment wordt geactiveerd.

Samenvatting


In dit document hebben we het vertakkingsgedrag van Git en de opdracht git branch besproken. Met de opdracht git branch kun je branches aanmaken, vermelden, hernoemen en verwijderen. Om verder te kunnen werken aan de branches die daaruit ontstaan, wordt de opdracht vaak gebruikt in combinatie met andere opdrachten, zoals git checkout. Meer informatie over bewerkingen voor de branch git checkout, zoals het wisselen tussen en samenvoegen van branches, vind je op de pagina git checkout.

Vergeleken met andere VCS's zijn de branch-activiteiten in Git goedkoop en worden ze vaak gebruikt. Deze flexibiliteit maakt een krachtige aanpassing van de Git-workflow mogelijk. Ga voor meer informatie over Git-workflows naar onze uitgebreide discussiepagina's over workflows: De workflow voor functie-branches, GitFlow-workflow en Vertakkings-workflow.


Deel dit artikel
Volgend onderwerp

Aanbevolen artikelen

Bookmark deze resources voor meer informatie over soorten DevOps-teams of voor voortdurende updates over DevOps bij Atlassian.

Mensen die samenwerken met een muur vol tools

Bitbucket-blog

Toelichting DevOps

DevOps-leertraject

Demo Den Feature-demo's met Atlassian-experts

Hoe Bitbucket Cloud werkt met Atlassian Open DevOps

Meld je aan voor onze DevOps-nieuwsbrief

Thank you for signing up