-
1. Aan de slag
- 1.1 Over versiebeheer
- 1.2 Een kort historisch overzicht van Git
- 1.3 Wat is Git?
- 1.4 De commando-regel
- 1.5 Git installeren
- 1.6 Git klaarmaken voor eerste gebruik
- 1.7 Hulp krijgen
- 1.8 Samenvatting
-
2. Git Basics
-
3. Branchen in Git
- 3.1 Branches in vogelvlucht
- 3.2 Eenvoudig branchen en mergen
- 3.3 Branch-beheer
- 3.4 Branch workflows
- 3.5 Branches op afstand (Remote branches)
- 3.6 Rebasen
- 3.7 Samenvatting
-
4. Git op de server
- 4.1 De protocollen
- 4.2 Git op een server krijgen
- 4.3 Je publieke SSH sleutel genereren
- 4.4 De server opzetten
- 4.5 Git Daemon
- 4.6 Slimme HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Hosting oplossingen van derden
- 4.10 Samenvatting
-
5. Gedistribueerd Git
-
6. GitHub
-
7. Git Tools
- 7.1 Revisie Selectie
- 7.2 Interactief stagen
- 7.3 Stashen en opschonen
- 7.4 Je werk tekenen
- 7.5 Zoeken
- 7.6 Geschiedenis herschrijven
- 7.7 Reset ontrafeld
- 7.8 Mergen voor gevorderden
- 7.9 Rerere
- 7.10 Debuggen met Git
- 7.11 Submodules
- 7.12 Bundelen
- 7.13 Vervangen
- 7.14 Het opslaan van inloggegevens
- 7.15 Samenvatting
-
8. Git aanpassen
- 8.1 Git configuratie
- 8.2 Git attributen
- 8.3 Git Hooks
- 8.4 Een voorbeeld van Git-afgedwongen beleid
- 8.5 Samenvatting
-
9. Git en andere systemen
- 9.1 Git als een client
- 9.2 Migreren naar Git
- 9.3 Samenvatting
-
10. Git Binnenwerk
- 10.1 Binnenwerk en koetswerk (plumbing and porcelain)
- 10.2 Git objecten
- 10.3 Git Referenties
- 10.4 Packfiles
- 10.5 De Refspec
- 10.6 Uitwisseling protocollen
- 10.7 Onderhoud en gegevensherstel
- 10.8 Omgevingsvariabelen
- 10.9 Samenvatting
-
A1. Bijlage A: Git in andere omgevingen
- A1.1 Grafische interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Visual Studio Code
- A1.4 Git in Eclipse
- A1.5 Git in Sublime Text
- A1.6 Git in Bash
- A1.7 Git in Zsh
- A1.8 Git in PowerShell
- A1.9 Samenvatting
-
A2. Bijlage B: Git in je applicaties inbouwen
- A2.1 Commando-regel Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Bijlage C: Git Commando’s
- A3.1 Setup en configuratie
- A3.2 Projecten ophalen en maken
- A3.3 Basic Snapshotten
- A3.4 Branchen en mergen
- A3.5 Projecten delen en bijwerken
- A3.6 Inspectie en vergelijking
- A3.7 Debuggen
- A3.8 Patchen
- A3.9 Email
- A3.10 Externe systemen
- A3.11 Beheer
- A3.12 Binnenwerk commando’s (plumbing commando’s)
7.2 Git Tools - Interactief stagen
Interactief stagen
Hier gaan we een blik werpen op een paar interactieve Git commando’s die je kunnen helpen om eenvoudig in je commits alleen bepaalde combinaties en delen van bestanden op te nemen. Deze instrumenten zijn zeer handig als je een aantal bestanden wijzigt en dan besluit dat je deze wijzigingen alleen in een aantal gerichte commits wilt hebben in plaats van een grote warrige commit. Op deze manier kan je ervoor zorgen dat je commits logisch onderscheiden wijzigingsgroepen (change sets) zijn en daarmee eenvoudig te reviewen door de ontwikkelaars die met je samenwerken.
Als je git add
aanroept met de -i
of --interactive
optie, zal Git in een interactieve schil modus schakelen, en je iets als het volgende tonen:
$ git add -i
staged unstaged path
1: unchanged +0/-1 TODO
2: unchanged +1/-1 index.html
3: unchanged +5/-1 lib/simplegit.rb
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now>
Je kunt zien dat dit commando je een heel andere kijk op je staging area geeft — eigenlijk dezelfde informatie die je krijgt met git status
maar wat beknopter en meer informatief.
Het lijst de wijzigingen die je gestaged hebt aan de linker- en de unstagede wijzigingen aan de rechterkant.
Hierna volgt een Commands gedeelte. Hier kan je een aantal dingen doen, waaronder bestanden stagen en unstagen, delen van bestanden stagen, untracked bestanden toevoegen en diffs zien van wat gestaged is.
Bestanden stagen en unstagen
Als je 2
of u
typt achter de What now>
prompt, zal het script je vragen welke bestanden je wilt stagen:
What now> 2
staged unstaged path
1: unchanged +0/-1 TODO
2: unchanged +1/-1 index.html
3: unchanged +5/-1 lib/simplegit.rb
Update>>
Om de TODO
en index.html
bestanden te stagen, kan je de nummers typen:
Update>> 1,2
staged unstaged path
* 1: unchanged +0/-1 TODO
* 2: unchanged +1/-1 index.html
3: unchanged +5/-1 lib/simplegit.rb
Update>>
De *
naast elk bestand geeft aan dat het bestand geselecteerd is om te worden gestaged.
Als je Enter drukt als je niets typt achter de Update>>
prompt, zal Git alles wat geselecteerd is voor je stagen:
Update>>
updated 2 paths
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> 1
staged unstaged path
1: +0/-1 nothing TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
Nu kan je zien dat de TODO
en index.html
bestanden gestaged zijn en het simplegit.rb
bestand nog steeds unstaged is.
Als je het TODO
bestand op dit moment wilt unstagen, kan je de 3
of r
(voor revert) optie gebruiken:
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> 3
staged unstaged path
1: +0/-1 nothing TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
Revert>> 1
staged unstaged path
* 1: +0/-1 nothing TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
Revert>> [enter]
reverted one path
Als je weer naar je Git status kijkt, kan je zien dat het TODO
bestand unstaged is:
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> 1
staged unstaged path
1: unchanged +0/-1 TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
Om de diff te zien van wat je gestaged hebt, kan je het 6
of d
(voor diff) commando gebruiken.
Het laat je een lijst zien van staged bestanden, en je kunt diegenen selecteren waar je de staged diff van wilt bekijken.
Dit is vergelijkbaar met het specificeren van git diff --cached
op de command line:
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> 6
staged unstaged path
1: +1/-1 nothing index.html
Review diff>> 1
diff --git a/index.html b/index.html
index 4d07108..4335f49 100644
--- a/index.html
+++ b/index.html
@@ -16,7 +16,7 @@ Date Finder
<p id="out">...</p>
-<div id="footer">contact : support@github.com</div>
+<div id="footer">contact : email.support@github.com</div>
<script type="text/javascript">
Met deze simpele commando’s kan je de interactieve toevoeg methode gebruiken om je staging area iets eenvoudiger te bewerken.
Patches stagen
Het is ook mogelijk om Git bepaalde delen van bestanden te laten stagen en de rest niet.
Bijvoorbeeld, als je twee wijzigingen maakt in het simplegit.rb
bestand en de ene wilt stagen en de andere niet, is dit erg eenvoudig te doen in Git.
Vanaf dezelfde interactieve prompt die is uitgelegd in de vorige paragraaf, type je 5
of p
(voor patch).
Git zal je vragen welke bestanden je deels wilt stagen; vervolgens, voor elke sectie van de geselecteerde bestanden, zal het een voor een brokken van de bestands-diff laten zien en vragen of je deze wilt stagen:
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index dd5ecc4..57399e0 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -22,7 +22,7 @@ class SimpleGit
end
def log(treeish = 'master')
- command("git log -n 25 #{treeish}")
+ command("git log -n 30 #{treeish}")
end
def blame(path)
Stage this hunk [y,n,a,d,/,j,J,g,e,?]?
Je hebt hier veel keuzes.
Het typen van ?
laat je een lijst zien van wat je kunt doen:
Stage this hunk [y,n,a,d,/,j,J,g,e,?]? ?
y - stage this hunk
n - do not stage this hunk
a - stage this and all the remaining hunks in the file
d - do not stage this hunk nor any of the remaining hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
Over het algemeen zal je y
of n
typen als je elk deel wilt stagen, maar alle delen in bepaalde bestanden stagen of een besluit om een deel voor nu even over te slaan kan ook handig zijn.
Als je het ene deel van het bestand staged en een ander deel unstaged laat, zal je status uitvoer er zo uit zien:
What now> 1
staged unstaged path
1: unchanged +0/-1 TODO
2: +1/-1 nothing index.html
3: +1/-1 +4/-0 lib/simplegit.rb
De status van het simplegit.rb
bestand is interessant.
Het laat je zien dat een aantal regels staged zijn een een aantal unstaged.
Je hebt het bestand deels gestaged.
Nu kan je het interactieve toevoeg script verlaten en git commit
uitvoeren om de deels gestagede bestanden te committen.
Je hoeft overigens niet in de interactieve toevoeg modues te zijn om het stagen van bestandsdelen te doen — je kunt hetzelfde script starten door git add -p
of git add --patch
op de commando regel te typen.
Bovendien kan je de patch modus gebruiken om bestanden deels te resetten met het reset --patch
commando, om delen van bestanden uit te checken met het checkout --patch
commando en om delen van bestanden te stashen met het stash save --patch
commando.
We zullen meer details geven van elk van deze als we de meer gevorderde toepassingen van deze commando’s gaan behandelen.