Maandelijkse archieven: april 2018

Spiekbriefje

Doel

Het doel van dit spiekbriefje is om veel gebruikte git commando's samen op te lijsten. Zo kan je snel een git commando opzoeken en uitvoeren. Kopieer dit gerust, maak een eigen korte lijst of verwijs naar deze pagina.

Basis

Enkel basis commando's.

git status Bekijk de huidige status van uw repository.
git init Maak een nieuwe repository aan in de huidige directory.
git xxxcommandxxx --help Open de default help pagina. Dit opent een externe html help page.

Bekijk de geschiedenis

Bekijk de log of history van het project.

git log Bekijk de commit geschiedenis
git log --summary Toont een samenvatting van elke commit (en niet de volledige info)
git log --oneline -n 5 Toont elke commit in één lijn. Optie n beperkt het tot 5 lijnen.
git log --graph Een grafische weergave in het command window.
git log --graph master Een grafische weergave van enkel de master branch
git log [filename] Geschiedenis van één bestand: filename
git log --follow [filename] Volg ook de naams-wijzigingen van een bestand (renames)
git log --first-parent [filename] Volg enkel de eerste parent. Dus de main branch en niet van de merged branch.
git log --all [filename] De geschiedenis van een bestandsnaam
git log SAH1..SHA2 --oneline Toon de geschiedenis tussen deze 2 commits (SHA). Vergeet de dubbele punt (..) niet!
git log SAH1..SHA2 --oneline --stat Voeg enkele statistieken toe, hoeveel lijnnummers gewijzigd zijn.

Gitk

Visualisatie met gitk

 gitk Bekijk de geschiedenis met een visuele interface.
gitk [filename] De geschiedenis van één bestand, visueel.
gitk --full-history [filename] De volledige geschiedenis van één bestandsnaam, inclusief merges, etc...
gitk --follow [filename] Bekijk de geschiedenis en volg de naamswijzigingen (renames.)

Reflog

De reflog is een krachtig commando dat toelaat om verloren commits terug te vinden. Dit gebeurt bijvoorbeeld door een commit te maken op een workspace zonder branch naam. Als je dan van branch verspringt, dan zie je deze commit niet meer terug.

Note: lost commits zullen verdwijnen als de database operuimd wordt (prune)

 

 git reflog  Bekijk de geschiedenis van alle commits en acties.

Add

Voeg bestanden toe. Dat wil zeggen: Van de working-copy naar de staging-area (or index).

git add file.txt  stage een bestand 
git add '*.txt' Voeg alle bestanden toe, inclusief deze in subfolders.
git add -A '*.*' stage ook bestanden die je wilt verwijderen: -A
git rm file.txt Verwijder dit bestand lokaal (in de working-copy)
fit rm -r foldername Verwijder bestanden en folders recursief
git add . Voeg alle bestanden toe
git reset . Het omgekeerde van add: Verwijder bestand van de staging-area

Commit

Voeg een commit toe aan Git.

 git commit -m "Omschrijving van de commit" Voer een commit uit, met volgende omschrijving (-m = message) 
git commit --amend --no-edit Voeg een wijziging toe aan de vorige commit. Eigenlijk wordt dit een nieuwe commit (SHA)  en wordt de vorige commit verwijdert.
git gui Start de standaard GUI voor een commit

Remote

Te gebruiken voor een lokale repository. Verwijs naar een remote server die aan de lokale repository gelinkt is.

 git remote add origin https://github.com/try-git/try_git.git Voeg een remote repository toe aan uw lokale repository.
git fetch Haal alle objecten en referencies van de remote repository binnen in uw lokale repository. Dit betekent niet dat uw working-copy verandert.
git pull Voert eigenlijk 2 acties uit: Git pull + merge lokaal. Eerst worden alle objecten binnengehaald, daarna gaat een automatische merge de laatste objecten op uw lokale working-copy zetten.

Push

Aan te vullen.

 git push --set-upstream origin master Enkel als de upstream niet bestaat, dan wordt de origin remote gezet voor de master branch.
git push -u origin master Hetzelfde
git push origin feature1 Push de 
git push origin push current branch to origin
git push push current branch to current branch remote (most likely origin)
git push --force-with-lease push current branch and update remote branch.

Voorbeeld:

  • Voer een lokale commit uit.
  • Forceer deze update naar de server.
git commit -m “Update message” --amend
git push --force-with-lease

Merge

Voeg een branch in een andere

 git merge feature  Voeg de feature branch in the huidige branch. Dit betekent dat er wijzigingen gebeuren op de huidige branch, want je voegt een andere erin.
git merge --no-ff feature Merge zonder fast-forward, dus maak je een bubbel
git merge --squash feature Voeg branch feature in de huidige branch, in één enkele commit. Dus die branch wordt platgeduwd tot één commit. Je moet die squash merge nog committen!

Tag

Het plaatsen van een label op een commit.

git tag 0.3 Maak een lichtgewicht label. This is eigenlijk niks meer dan het opslaan van de SHA van deze commit in een bestand in de .git folder.
git tag -a 0.3 Maak een annotated label. Dit is een appart git-object met zijn eigen SHA en meer informatie voer de commit, zoals naam, datum, ...
git tag -d 0.2 Verwijder een label
git tag -f 0.2 Forceer het verplaatsen van een label naar de huidige commit.
git tag -m "Tag message" 0.2 Voeg een lichtgewicht label toe met message
git push origin tag_name Push één tag
git push --tags Push all tags (niet aan te raden)

git tag -d 12345

git push origin :refs/tags/12345

Verwijder een remote tag: 1) Verwijder de tag lokaal. 2) Push de lege tag referentie naar de remote

 

overzicht van de labels
git tag Lijst van alle lokale labels
git tag -l Lijst van alle lokale labels
git tag -l pattern Beperk de labels tot dit patroon. bv: v6.5.*
git tag -n Lijst van alle lokale labels met een geannoteerde message
git show-ref --tags Toon de referenties naar de labels (tag)
git show-ref --tags -d Toon de referentie naar de tag + de commit waarom deze tag staat
git ls-remote --tags origin Toon de remote labels (referentie van tag object + commit message)
git ls-remote --refs origin Toon de remote labels (enkel de reference van de commit message)

Reset

Reset een commit naar een vorige commit.

 git reset folder/file.txt  Verwijder een bestand van de staged/indexed area
git reset HEAD --soft Ga terug naar de committed history, maar laat de bestanden in de working directory.
git reset HEAD --mixed Ga terug naar de committed + staged history, maar laat de bestanden in de working directory.
git reset HEAD --hard Ga terug naar de committed +staged + working directory history.
git reset HEAD~ Ga terug naar de vorige commit. (delete een commit). wijzigingen blijven wel in de working directory (uncommitted)
git reset HEAD~2 Do dit 2 keer. (Je kan ook ^ gebruiken ipv ~, dan volg je wel een andere parent, enkel voor merges. zie manual)

Template

Aan te vullen.

How to tag a version.

It is a good idea to add tags to specific commits.

Tag overview

git tag     : show all tags

Add an annotated tags: recommended

Annotated tags are stored as full objects in the Git database. Containing the tagger name, email, date, have a tagging message.

git tag -a v3.1.0 -m "Release 3.1.0"            : add an annotated tag to current commit with message
git tag -a v3.1.0 -m "Release 3.1.0" SHA        : add an annotated tag to a commit with SHA and add message

Adding a simple tag: not recommended

A simple tag is very much like a branch, but it doesn’t change location and is fixed to one commit.

git tag v3.01          : add a simple tag to current commit
git tag v3.01 SHA       : add a simple tag to commit with SHA

It is recommended to use the “-a” option for annotated tags.

Push a tag

By default, the git push command doesn’t transfer tags to remote servers. You will have to explicitly push tags to a shared server.

git push origin <tagname>
git push origin v3.1.0

How to keep the development branch clean?

Use case: The work is finished on the feature branch and needs to be checked into the development branch.

Default: Git performs a fast-forward merge by default. 

Result: A fast forward clutters the development branch and loses the overview on the work done in the feature branch.

Advise: The –no-ff flag causes the merge to always create a new commit object, even if the merge could be performed with a fast-forward. This groups all historical commits that belong to a feature branch and keeps the development branch clean.

More info at: