Hier zijn alle Git-opdrachten die ik vorige week heb gebruikt, en wat ze doen.

Afbeelding tegoed: GitHub Octodex

Zoals de meeste nieuwkomers, begon ik StackOverflow te zoeken naar Git-opdrachten en vervolgens antwoorden te kopiëren en plakken, zonder echt te begrijpen wat ze deden.

Afbeelding tegoed: XKCD

Ik herinner me dat ik dacht: "Zou het niet mooi zijn als er een lijst met de meest voorkomende Git-opdrachten zou zijn, samen met een verklaring waarom ze nuttig zijn?"

Welnu, hier ben ik jaren later om een ​​dergelijke lijst samen te stellen en enkele best practices op te stellen die zelfs ervaren gevorderden nuttig zouden moeten vinden.

Om het praktisch te houden, baseer ik deze lijst op de daadwerkelijke Git-opdrachten die ik de afgelopen week heb gebruikt.

Bijna elke ontwikkelaar gebruikt Git, en hoogstwaarschijnlijk GitHub. Maar de gemiddelde ontwikkelaar gebruikt waarschijnlijk deze drie opdrachten 99% van de tijd:

git add --all
git commit -am ""
git push origin master

Dat is allemaal goed en wel als je werkt aan een eenpersoonsteam, een hackathon of een wegwerp-app, maar wanneer stabiliteit en onderhoud prioriteit beginnen te krijgen, commits opschonen, vasthouden aan een vertakkingsstrategie en schrijven coherente commit berichten worden belangrijk.

Ik zal beginnen met de lijst met veelgebruikte opdrachten om het voor nieuwkomers gemakkelijker te maken om te begrijpen wat mogelijk is met Git, en ga dan verder met de meer geavanceerde functionaliteit en best practices.

Regelmatig gebruikte opdrachten

Om Git in een repository (repo) te initialiseren, moet je gewoon de volgende opdracht typen. Als je Git niet initialiseert, kun je in die repo geen andere Git-opdrachten uitvoeren.

git init

Als u GitHub gebruikt en code naar een GitHub-repo pusht die online is opgeslagen, gebruikt u een externe repo. De standaardnaam (ook bekend als een alias) voor die externe repo is oorsprong. Als je een project van Github hebt gekopieerd, heeft het al een oorsprong. Je kunt die oorsprong bekijken met de opdracht git remote -v, die de URL van de externe repo weergeeft.

Als je je eigen Git-repo hebt geïnitialiseerd en deze wilt koppelen aan een GitHub-repo, moet je er een maken op GitHub, de opgegeven URL kopiëren en de opdracht git remote add origin gebruiken, met de URL van GitHub "" vervangen. Van daaruit kunt u toevoegen, vastleggen en pushen naar uw externe repo.

De laatste wordt gebruikt wanneer u de externe repository moet wijzigen. Stel dat u een repo van iemand anders hebt gekopieerd en de externe repository van de oorspronkelijke eigenaar wilt wijzigen in uw eigen GitHub-account. Volg hetzelfde proces als git remote add origin, behalve gebruik in plaats daarvan set-url om de externe repo te wijzigen.

git remote -v
git remote origin toevoegen 
git remote set-url origin 

De meest voorkomende manier om een ​​repo te kopiëren is om git clone te gebruiken, gevolgd door de URL van de repo.

Houd er rekening mee dat de externe repository wordt gekoppeld aan het account waarvan u de repo hebt gekloond. Dus als je een repo van iemand anders hebt gekloond, kun je pas naar GitHub pushen als je de oorsprong wijzigt met behulp van de bovenstaande opdrachten.

git clone 

Je zult snel merken dat je takken gebruikt. Als je niet begrijpt wat branches zijn, zijn er andere tutorials die veel dieper zijn, en die moet je lezen voordat je verder gaat (deze is er).

De opdracht git branch geeft een lijst van alle branches op je lokale machine. Als je een nieuwe branch wilt maken, kun je git branch gebruiken, waarbij de naam van de tak vertegenwoordigt, zoals "master".

De opdracht git checkout schakelt naar een bestaande branch. Je kunt ook de opdracht git checkout -b gebruiken om een ​​nieuwe branch te maken en er onmiddellijk naar over te schakelen. De meeste mensen gebruiken dit in plaats van afzonderlijke vertakkings- en afrekenopdrachten.

git tak
git branch 
git afrekenen 
git afrekenen -b 

Als je een aantal wijzigingen in een branch hebt aangebracht, laten we het "ontwikkelen" noemen, en je wilt die branch weer in je master branch samenvoegen, gebruik je de opdracht git merge . Je wilt de master branch uitchecken en vervolgens git merge develop uitvoeren om develop in de master branch samen te voegen.

git samenvoegen 

Als je met meerdere mensen werkt, bevind je je in een positie waarin een repo op GitHub is bijgewerkt, maar je hebt de lokale wijzigingen niet. Als dat het geval is, kun je git pull origin gebruiken om de meest recente wijzigingen uit die externe branch te halen.

git pull origin 

Als je nieuwsgierig bent om te zien welke bestanden zijn gewijzigd en wat er wordt gevolgd, kun je de git-status gebruiken. Als je wilt zien hoeveel elk bestand is gewijzigd, kun je git diff gebruiken om het aantal gewijzigde regels in elk bestand te zien.

git status
git diff --stat

Geavanceerde opdrachten en best practices

Al snel bereik je een punt waarop je wilt dat je commits er mooi uitzien en consistent blijven. Je zult misschien ook moeten rommelen met je commit geschiedenis om je commits gemakkelijker te begrijpen te maken of om een ​​onbedoelde brekende verandering terug te draaien.

Met de opdracht git log kun je de commit historie bekijken. Je wilt dit gebruiken om de geschiedenis van je commits te bekijken.

Je commits komen met berichten en een hash, dat is een willekeurige reeks cijfers en letters. Een voorbeeld van een hash kan er zo uitzien: c3d882aa1aa4e3d5f18b3890132670fbeac912f7

git log

Stel dat u iets heeft gepusht dat uw app heeft verbroken. In plaats van het te repareren en iets nieuws te pushen, ga je liever één keer terug en probeer je het opnieuw.

Als je terug in de tijd wilt gaan en je app van een eerdere commit wilt uitchecken, kun je dit rechtstreeks doen door de hash als de filiaalnaam te gebruiken. Hiermee wordt uw app losgekoppeld van de huidige versie (omdat u een historisch record bewerkt, in plaats van de huidige versie).

git afrekenen c3d88eaa1aa4e4d5f

Als je vervolgens wijzigingen aanbrengt vanuit die historische tak en je opnieuw wilt pushen, moet je een force push doen.

Waarschuwing: Forceer duwen is gevaarlijk en mag alleen worden gedaan als het absoluut noodzakelijk is. Het zal de geschiedenis van uw app overschrijven en u zult verliezen wat daarna kwam.

git push -f oorsprong meester

Andere keren is het gewoon niet praktisch om alles in één commit te houden. Misschien wil je je voortgang opslaan voordat je iets probeert dat potentieel riskant is, of misschien heb je een fout gemaakt en wil je jezelf de schaamte voor een fout in je versiegeschiedenis besparen. Daarvoor hebben we git rebase.

Stel dat je 4 commits in je lokale geschiedenis hebt (niet naar GitHub gepusht) waarin je heen en weer bent gegaan. Je verplichtingen zien er slordig en besluiteloos uit. Je kunt rebase gebruiken om al die commits te combineren in een enkele, bondige commit.

git rebase -i HEAD ~ 4

Met de bovenstaande opdracht opent u de standaardeditor van uw computer (dit is Vim tenzij u het op iets anders hebt ingesteld), met verschillende opties voor het wijzigen van uw commits. Het ziet er ongeveer zo uit als de onderstaande code:

kies 130deo9 oudste commit bericht
kies 4209fei tweede oudste commit bericht
kies 4390 gne derde oudste commit bericht
kies bmo0dne nieuwste commit bericht

Om deze te combineren, moeten we de optie "pick" wijzigen in "fixup" (zoals in de documentatie onder de code staat) om de commits te melden en de commit-berichten te verwijderen. Merk op dat je in vim op "a" of "i" moet drukken om de tekst te kunnen bewerken en om op te slaan en af ​​te sluiten, je de escape-toets moet typen gevolgd door "shift + z + z". Vraag me niet waarom, dat is het gewoon.

kies 130deo9 oudste commit bericht
fixup 4209fei tweede oudste commit bericht
fixup 4390gne derde oudste commit bericht
fixup bmo0dne nieuwste commit bericht

Dit zal al je commits in de commit samenvoegen met het bericht "oudste commit bericht".

De volgende stap is het hernoemen van je commit bericht. Dit is volledig een kwestie van mening, maar zolang je een consistent patroon volgt, is alles wat je doet prima. Ik raad aan om de commit-richtlijnen van Google voor Angular.js te gebruiken.

Gebruik de vlag Wijzigen om het vastleggingsbericht te wijzigen.

git commit --amend

Dit opent ook vim en de regels voor het bewerken en opslaan van tekst zijn hetzelfde als hierboven. Om een ​​voorbeeld te geven van een goede commit-boodschap, volgt hier een van de regels uit de richtlijn:

prestatie: voeg streep afrekenen knop toe aan betalingspagina
- voeg streep afrekenen knop toe
- schrijf tests voor het afrekenen

Een voordeel van het bijhouden van de typen in de richtlijn is dat het schrijven van wijzigingslogboeken eenvoudiger wordt. U kunt ook informatie in de voettekst (nogmaals, gespecificeerd in de richtlijn) opnemen die naar problemen verwijst.

Opmerking: je moet voorkomen dat je commits rebasen en pletten als je aan een project samenwerkt en code naar GitHub hebt gepusht. Als je de versiegeschiedenis onder de neus van mensen begint te veranderen, kun je het leven van iedereen moeilijker maken met moeilijk te volgen bugs.

Er zijn een bijna eindeloos aantal mogelijke opdrachten met Git, maar deze opdrachten zijn waarschijnlijk de enige die je moet weten voor je eerste paar jaar programmeren.

Sam Corcos is de hoofdontwikkelaar en mede-oprichter van Sightline Maps, het meest intuïtieve platform voor 3D-print topografische kaarten, evenals LearnPhoenix.io, een tussentijdse geavanceerde tutorialsite voor het bouwen van schaalbare productie-apps met Phoenix en React.