Dit is een vervolg up het commentaar van het artikel van gisteren over interactief toevoegen. Lezers smeekten om uitleg over het krachtige git add -p
commando, een kortere weg naar de patch
mode van interactief toevoegen. Dit commando can wijzigingen in bestanden opdelen in hunks
zodat je precies kunt committen
wat je wilt en niet uitsluitend het gehele bestand.
Dit gedrag is erg handig omdat het je toestaat iedere hunk
van de tekst te versioneren die je zou willen. Misschien breekt die ene regel de bouw op machines van anderen of de bouw server, maar niet jouw bouw. Je begrijpt mijn punt.
Laten we kijken naar een voorbeeld van het gebruik, weer door wijzigingen aan te brengen aan ons project zijn betrouwbare README. Hier is wat git diff
on verteld over de wijzigingen die we zojuist gemaakt hebben:
diff --git a/README.md b/README.md index 2556dae..45d8b6e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,14 @@ > There is only one way... > ~ Henry Van Dyke +# Project information + +Blah blah blah... + # Want to contribute? If you have ideas about... + +# About + +This blog is just awesome.
Zoals je kunt zien hebben we wijzigingen gemaakt in verschillende delen van het bestand. Echter ik wil uitsluitend het onderste deel committen
. Trouwens, wij heeft er nu documentatie nodig? Type:
git add -p
Wanneer je dit doet wordt je begroet met een vraag net zoals git add -i
, maar deze heeft behoorlijk wat opties:
Stage this hunk [y/n/a/d/s/e/?]? ? y - stage this hunk n - do not stage this hunk [... removed a few ...] s - split the current hunk into smaller hunks e - manually edit the current hunk ? - print help
De meeste zijn evident, maar laten we de echt vette bekijken. Wat we echt willen is de s
optie, deze splitst het bestand in kleinere code hunks
, een voor het hogere “Project Information” blok en een voor het “About” blok. Wanneer het gesplitst is word je bevraagd met de wijzigingen voor die hunk
:
Split into 2 hunks. @@ -1,6 +1,10 @@ > There is only one way... > ~ Henry Van Dyke +# Project information + +Blah blah blah... + # Want to contribute? If you have ideas about... Stage this hunk [y/n/a/d/j/J/e/?]? n
Vanaf hier kunnen we de wijzigingen negeren met n
, en doorgaan met de volgende en deze toevoegen met y
:
@@ -4,3 +8,7 @@ # Want to contribute? If you have ideas about... + +# About + +This blog is just awesome. Stage this hunk [y/n/a/d/K/e/?]? y
Een git status
uitvoeren laat de wijzigingen zien die op het punt staan gecommit
te worden en de wijzigingen die zullen worden gestaged
op een bestand. Vreemd, maar logisch: we hebben de helft van de wijzigingen gestaged
, en de andere helft is nog niet aan de index toegevoegd.
Er is ook een e
optie, deze laat je handmatig hunks
aan en uitschakelen in je favoriete editor. Instructies zijn inbegrepen bij deze optie, dus speel ermee wanneer je de kans krijgt. (Niet grappig bedoeld.)
Als je verhalen hebt over hoe git add -p
je heeft geholpen (of een andere geweldige functie die vergeten is), laat het ons weten in de commentaren!