Git
Chapters ▾ 2nd Edition

A3.4 Git Commando’s - Branchen en mergen

Branchen en mergen

Er zijn maar een handjevol commando’s die de meeste van de branch en merge functionaliteit in Git implementeren.

git branch

Het git branch commando is eigenlijk een soort branch beheer gereedschap. Het kan de branches die je hebt uitlijsten, een nieuwe branch aanmaken, branches verwijderen en hernoemen.

Het grootste gedeelte van Chapter 3 is gewijd aan het branch commando en het wordt door het gehele hoofdstuk gebruikt. We introduceren het eerst in “Een nieuwe branch maken” en we behandelen de meeste van de andere mogelijkheden (uitlijsten en verwijderen) in “Branch-beheer”.

In “Tracking branches” gebruiken we de git branch -u optie om een tracking branch op te zetten.

Tot slot, behandelen we een aantal dingen die het op de achtergrond doet in “Git Referenties”.

git checkout

Het git checkout commando wordt gebruikt om branches te wisselen en inhoud uit te cheken in je werk directory.

We komen het commando voor het eerst tegen in ??? samen met de git branch commando.

We zien hoe het te gebruiken om tracking branches te starten met de --track vlag in “Tracking branches”.

We gebruiken het om bestandsconflicten te herintroduceren met --conflict=diff3 in “Conflicten beter bekijken”.

We behandelen het in nog meer detail in verband met haar relatie met git reset in “Reset ontrafeld”.

Tot slot, behandelen we een aantal implementatie details in “De HEAD”.

git merge

Het git merge tool wordt gebruikt om een of meerdere branches te mergen naar de branch die je hebt uitgechecked. Het zal daarna de huidige branch voortbewegen naar het resultaat van de merge.

Het git merge commando werd voor het eerst geïntroduceerd in “Eenvoudig branchen”. Hoewel het op diverse plaatsen in het boek wordt gebruikt, zijn er over het algemeen erg weinig variaties op het merge commando, normaalgesproken alleen git merge <branch> met de naam van de enkele branch die je wilt inmergen.

We hebben behandeld hoe een squashed merge te doen (waar Git het werk merged maar doet alsof het niet meer dan een nieuwe commit is zonder de historie van de branch die je in merged op te slaan) aan het einde van “Klein openbaar project”.

We hebben veel behandeld over het merge proces en commando, inclusief het -Xignore-space-change commando en de --abort vlag om een problematische merge af te breken in “Mergen voor gevorderden”.

We hebben gezien hoe handtekeningen te verifiëren als je project GPG tekenen gebruikt in “Commits tekenen”.

Tot slot, hebben we Subtree mergen behandeld in “Het mergen van subtrees”.

git mergetool

Het git mergetool commando roept simpelweg een externe merge help aan in het geval dat je problemen hebt met een merge in Git.

We hebben het kort genoemd in “Eenvoudige merge conflicten” en behandelen met detail hoe je je eigen externe merge tool kunt implementeren in “Externe merge en diff tools”.

git log

Het git log commando wordt gebruikt om de bereikbare opgeslagen historie van een project te laten zien vanaf de meeste recente commit snapshot en verder terug. Standaard laat het alleen de historie zien van de barnch waar je op dat moment op werkt, maar het kan een andere of zelfs meerdere heads of branches worden gegeven vanwaar het door de geschiedenis zal gaan navigeren. Het wordt ook vaak gebruikt om verschillen te laten zien tussen twee of meer branches op het commit niveau.

Dit commando wordt in vrijwel elk hoofdstuk van het boek gebruikt om de historie van het project te tonen.

We introduceren het commando en behandelen het met nogal wat detail in “De commit geschiedenis bekijken”. Daar nemen we een kijkje naar de -p en --stat opties om een idee te krijgen van wat er was geïntroduceerd in elke commit en de --pretty en --oneline opties om de historie meer bekopt te bekijken, samen met wat eenvoudige datum en auteur filter opties.

In “Een nieuwe branch maken” gebruiken we het met de --decorate optie om eenvoudig te laten zien waar onze branch verwijzingen zijn en we gebruiken ook de --graph optie om te zien hoe uiteenlopende histories eruit zien.

In “Besloten klein team” en “Commit reeksen” behandelen we de branchA..branchB syntax om het git log commando te gebruiken om te zien welke commits er uniek zijn voor een branch in vergelijking met een andere branch. In “Commit reeksen” behandelen we dit redelijk uitgebreid.

In “Merge log” en “Drievoudige punt” behandelen we het gebruik van het branchA...branchB formaat en de --left-right syntax om te zien wat er in een branch zit of de andere, maar niet in beide. In “Merge log” kijken we ook naar hoe de --merge optie te gebruiken als hulp om een merge conflict te debuggen en ook het gebruik van de --cc optie om naar merge conflicten te kijken in je historie.

In “RefLog verkorte namen” gebruiken we de -g optie om de Git reflog te bekijken via dit gereedschap in plaats van branch navigatie te doen.

In ??? kijken we naar het gebruik van de -S en -L opties om een redelijk gevorderde zoekopdrachten uit te voeren naar iets dat historisch heeft plaatsgevonden in de code, zoals het bekijken van de geschiedenis van een functie.

In “Commits tekenen” zien we hoe --show-signature te gebruiken om een validatie tekenreeks toe te voegen aan elke commit in de git log uitvoer afhankelijk van of het valide is getekend of niet.

git stash

Het git stash commando wordt gebruikt om tijdelijk niet-gecommit werk op te slaan, zodat je werk directory opgeschoond wordt; hierdoor hoef je geen onvolledig werk te committen naar een branch.

Dit wordt eigenlijk in zijn geheel behandeld in “Stashen en opschonen”.

git tag

Het git tag commando wordt gebruikt om een blijvende boekwijzer te geven aan een specifiek punt in de code historie. Over het algemeen wordt dit gebruikt voor zaken zoals releases.

Dit commando wordt geïntroduceerd en in detail behandeld in “Taggen (Labelen)” en we gebruiken het in de praktijk in “Je releases taggen”.

We behandelen ook hoe een GPG getekende tag te maken met de -s vlag en verifiëren er een met de -v vlag in “Je werk tekenen”.