Cursus
Git diff is je venster op de wijzigingen in je code-repository. In de kern is het een opdracht die je de verschillen laat zien tussen verschillende toestanden van je bestanden — of je nu je huidige werk vergelijkt met wat je al hebt gestaged, of wijzigingen vergelijkt tussen branches en commits. Zie het als Git’s manier om te antwoorden op de vraag: “Wat is er veranderd?” Als je git diff uitvoert, analyseert Git de inhoud van bestanden regel voor regel, identificeert wat is toegevoegd, verwijderd of aangepast, en presenteert deze informatie in een gestandaardiseerd formaat dat precies uitlicht wat waar is veranderd.
Git diff helpt ontwikkelaars de codekwaliteit te bewaken door een helder beeld te geven van wijzigingen voordat ze worden gecommit. Hier behandelen we hoe je dit essentiële commando effectief gebruikt, van basisvergelijkingen tot geavanceerde technieken die je ontwikkelworkflow en teamsamenwerking verbeteren.
Vereisten
Om deze tutorial te volgen, is het handig als je bekend bent met deze Git-concepten:
- Basis Git-workflow (init, add, commit)
- Git-repositories en hun structuur
- Branches en hoe ze werken
- Commits en commitgeschiedenis
- De staging area (index)
Moet je deze concepten opfrissen? Deze bronnen helpen:
- Git Cheat Sheet — Snel naslagwerk voor veelgebruikte Git-commando’s
- Cursus Introduction to Git — Voor beginners die de basis van Git willen leren
- GitHub- en Git-tutorial voor beginners — Praktische introductie tot Git en GitHub
- Intermediate Git-cursus — Voor wie klaar is om zijn Git-vaardigheden te verdiepen
Je hebt Git geïnstalleerd op je systeem nodig om de voorbeelden te volgen. Alle commando’s kun je uitvoeren in een terminal of opdrachtprompt.
Waarom Git diff onmisbaar is voor developers
Elke developer moet weten wat er in zijn code is veranderd, of je nu solo werkt of in een team van honderden. Zonder git diff zou je moeten gokken welke regels je hebt aangepast, waardoor troubleshooten en samenwerken vrijwel onmogelijk wordt.
Git diff is essentieel voor change management en vormt de basis voor het bouwen van kwaliteitssoftware via effectieve reviewprocessen. Bij het beoordelen van wijzigingen geeft git diff de context die je nodig hebt om te begrijpen niet alleen wat er veranderde, maar ook waarom die wijzigingen ertoe doen.
Deze directe zichtbaarheid in de evolutie van je code helpt teams standaarden te bewaken en bugs uit productie te houden.
Naarmate projecten complexer worden, wordt git diff echt onmisbaar om meerdere belangrijke redenen:
- Wijzigingen verifiëren : Bevestig exact wat je gaat committen, en voorkom dat debugcode of niet-gerelateerde wijzigingen per ongeluk meegaan
- Kennisoverdracht : Begrijp wat teamgenoten gedaan hebben zonder volledige bestanden te hoeven lezen
- Conflictoplossing: Identificeer precies waar en hoe wijzigingen botsen tijdens merges
- Historische analyse : Achterhaal wanneer specifieke wijzigingen zijn geïntroduceerd om bugs te vinden of de evolutie van features te begrijpen
- Gerichte code reviews : Richt je aandacht op de delen van de code die daadwerkelijk veranderd zijn, wat tijd bespaart en de reviewkwaliteit verbetert
Om git diff effectief te gebruiken, is het nodig de onderliggende architectuur te begrijpen die deze vergelijkingen mogelijk maakt — Git’s “Three-Tree”-model.
Git’s Three-Tree-architectuur
Om git diff te begrijpen, moet je eerst Git’s fundamentele “three-tree”-architectuur snappen. Ondanks de naam zijn dit geen echte bomen in het bestandssysteem, maar drie verschillende toestanden waarin je code zich bevindt.
Zie deze toestanden als drie verschillende versies van je project die Git tegelijk bijhoudt: de Working Directory (je echte bestanden), de Staging Area (of index, waar wijzigingen worden voorbereid voor een commit) en de Repository (de gecommitte geschiedenis van je project, opgeslagen in de .git-map).

De Working Directory bevat de bestanden waaraan je actief werkt — hier schrijf je code, maak je wijzigingen en test je werk. De Staging Area is een voorbereidingszone waar je selecteert welke wijzigingen in je volgende commit moeten worden opgenomen. Je kunt het zien als een laadperron waar pakketten (je wijzigingen) worden geordend voor verzending.
Tot slot slaat de Repository de volledige geschiedenis van je project op als een reeks commits , snapshots van je code op specifieke tijdstippen, aan elkaar gekoppeld tot een historische keten.
Git diff werkt door deze drie toestanden in verschillende combinaties te vergelijken. Als je git diff zonder argumenten uitvoert, vergelijkt het je Working Directory met de Staging Area en toont het wijzigingen die je hebt aangebracht maar nog niet hebt gestaged.
Met git diff --staged vergelijk je de Staging Area met de laatste commit en zie je wat er in je volgende commit wordt opgenomen.
En git diff HEAD vergelijkt je Working Directory direct met de laatste commit en toont alle niet-gecommitte wijzigingen, ongeacht hun stagingstatus.
Deze vergelijkingspunten vormen de basis voor alle diff-operaties in Git:
- Working Directory ↔ Staging Area: Welke wijzigingen heb ik aangebracht maar nog niet gestaged? (
git diff) - Staging Area ↔ Repository: Welke wijzigingen heb ik gestaged die hierna worden gecommit? (
git diff --staged) - Working Directory ↔ Repository: Wat is het totale verschil tussen mijn werkbestanden en de laatste commit? (
git diff HEAD) - Tussen commits: Hoe is de code geëvolueerd tussen specifieke punten in de geschiedenis? (
git diff commit1-hash commit2-hash)
Dit architectuurbegrip geeft je het mentale model om git diff effectief te gebruiken om precies te lokaliseren wat er in je codebase is veranderd, waar en wanneer.
Met dit architectuuroverzicht op zak, kunnen we nu verkennen hoe je git diff-commando’s in de praktijk gebruikt om inzicht te krijgen in de evolutie van je code over deze drie toestanden.
Basistoepassingen van Git diff
Laten we een voorbeeldproject voor data-analyse maken om git diff in actie te laten zien. We zetten een kleine repository op met Python-scripts, CSV-data en tekstbestanden die we in deze tutorial kunnen aanpassen.
# Create and initialize our project
mkdir data-analysis-project
cd data-analysis-project
git init
# Create initial files
echo "# Data Analysis Project\nA sample project to demonstrate git diff functionality." > README.md
echo "import pandas as pd\n\ndef load_data(filename):\n return pd.read_csv(filename)\n\ndef analyze_data(data):\n return data.describe()" > analysis.py
echo "id,name,value\n1,alpha,10\n2,beta,20\n3,gamma,30" > data.csv
echo "DEBUG=False\nDATABASE_PATH=./data/" > config.txt
echo "def normalize_data(data):\n return (data - data.min()) / (data.max() - data.min())" > utils.py
# Make our first commit
git add .
git commit -m "Initial commit with basic project structure"
# Check the directory structure
> tree
.
├── README.md
├── analysis.py
├── config.txt
├── data.csv
└── utils.py
Ons project heeft nu vijf bestanden onder versiebeheer, wat ons een basis geeft om verschillende diff-scenario’s te demonstreren. Terwijl we verdergaan, passen we deze bestanden aan om te laten zien hoe git diff wijzigingen in verschillende contexten zichtbaar maakt.
De resultaten van git diff begrijpen
Wanneer je een git diff-commando uitvoert, volgt de output een gestandaardiseerd formaat dat duidelijk aangeeft wat er is veranderd. Laten we ons bestand analysis.py aanpassen om een diff in actie te zien:
# Update analysis.py with a new function
echo "import pandas as pd\n\ndef load_data(filename):\n return pd.read_csv(filename)\n\ndef analyze_data(data):\n return data.describe()\n\ndef visualize_data(data):\n return data.plot(kind='bar')" > analysis.py
Laten we nu de resulterende git diff bekijken:
git diff
Je ziet een output die hierop lijkt:

Opmerking: om de git diff-output af te sluiten, druk je op “q” in je terminal.
Laten we deze output ontleden:
- De header (
diff --git a/analysis.py b/analysis.py) toont welk bestand wordt vergeleken, namelijk analysis.py - De bestandsmetadata (
index db0e049..a7a7ab0 100644) toont interne Git-identificatoren voor de voor- en na-versies - De bestandsmarkeringen (
--- a/analysis.py and +++ b/analysis.py) geven de “voor”– en “na”-bestanden aan - De hunk-header (
@@ -5,3 +5,6 @@) laat zien welke regels zijn beïnvloed. Deze notatie kun je zo lezen:
-5,3betekent: vanaf regel 5 in het originele bestand worden 3 regels getoond in de diff+5,6betekent: vanaf regel 5 in het gewijzigde bestand worden 6 regels getoond in de diff- Het verschil tussen deze nummers geeft aan dat er 3 regels zijn toegevoegd
5. De inhoudelijke wijzigingen waarbij regels die met + beginnen toevoegingen tonen
In grotere bestanden groepeert git diff wijzigingen in “hunks” — secties van het bestand die wijzigingen bevatten. Elke hunk heeft een eigen header met regelnummers om je te helpen de wijzigingen in het bestand te lokaliseren.
Working Directory en Staging Area vergelijken
Het uitvoeren van git diff zonder argumenten vergelijkt je Working Directory (huidige toestand van de bestanden) met de Staging Area (wijzigingen die klaarstaan om te worden gecommit). Dit is handig om te bekijken wat je hebt veranderd maar nog niet hebt voorbereid voor je volgende commit.
Laten we meerdere bestanden aanpassen om dit te demonstreren:
# Update README.md
echo "# Data Analysis Project\nA sample project to demonstrate git diff functionality.\n\n## Installation\nRun \pip install -r requirements.txt" > README.md
# Update data.csv
echo "id,name,value\n1,alpha,10\n2,beta,20\n3,gamma,30\n4,delta,40" > data.csv
Stage nu alleen de wijzigingen in README.md:
git add README.md
Als je nu git diff uitvoert, zie je alleen de ongestagede wijzigingen aan data.csv en het hierboven gewijzigde bestand analysis.py:

Dit helpt je focussen op wat je nog niet hebt gestaged. Wil je zien wat je al hebt gestaged:
git diff --staged # or git diff --cached (they're synonyms)

Dit toont de wijzigingen aan README.md die gestaged en klaar zijn om te committen. Deze workflow is cruciaal om schone, logische commits te maken. Je kunt delen van je werk stagen die logisch bij elkaar horen, de gestagede diff reviewen om te bevestigen dat het één samenhangende wijziging is, en die dan committen.
Staging Area en laatste commit vergelijken
Het commando git diff --staged vergelijkt je Staging Area met je laatste commit. Dit laat je precies zien wat er in je volgende commit terechtkomt als je nu git commit uitvoert.
Laten we onze wijzigingen aan data.csv stagen en bekijken wat er gestaged is:
git add data.csv
git diff --staged

De output toont nu wijzigingen aan zowel README.md als data.csv, omdat beide zijn gestaged. Deze controlemoment vóór het committen is cruciaal — het is je laatste verdedigingslinie tegen het committen van onbedoelde wijzigingen.
Een veelgebruikte workflow ziet er zo uit:
- Breng wijzigingen aan in meerdere bestanden
- Voer
git diffuit om alle wijzigingen te bekijken - Gebruik
git add <file>selectief om logische groepen wijzigingen te stagen - Voer
git diff --stageduit om te verifiëren wat er gecommit gaat worden - Commit de gestagede wijzigingen met
git commit -m "Your message" - Herhaal dit voor andere logische groepen wijzigingen
Deze methodische aanpak helpt een schone, betekenisvolle commitgeschiedenis te behouden, waardoor het eenvoudiger wordt om te begrijpen hoe je project is geëvolueerd en waar issues mogelijk zijn geïntroduceerd. Naarmate je ervaring groeit, worden deze diff-commando’s tweede natuur en je constante metgezellen in het ontwikkelproces.
Laten we onze commits maken voordat we naar de volgende fase gaan:
# data.csv and README.md are to be committed
git commit -m "Modify data.csv and README.md files"
# Stage and commit analysis.py
git add analysis.py
git diff --staged # Review the changes one more time
git commit -m "Add a new function to analysis.py"
Intermediaire Git diff-technieken
Nu we de basis van git diff begrijpen, verkennen we krachtigere technieken die je vermogen vergroten om wijzigingen in je projecten te volgen en te analyseren. We blijven werken met ons data-analyseproject om deze intermediaire concepten te demonstreren.
Vergelijken tussen verschillende referenties
Git is gebouwd rond het concept van referenties — wijzers naar specifieke toestanden van je code. Deze referenties omvatten branches, commits en tags. Met git diff kun je willekeurige twee van deze referenties vergelijken om te zien wat er tussen die momenten is veranderd.
Laten we een nieuwe branch maken voor een feature en wat wijzigingen aanbrengen:
# Create and switch to a new branch
git checkout -b feature/advanced-analytics
# Modify the analysis.py file with a new function
echo "import pandas as pd
import numpy as np
def load_data(filename):
return pd.read_csv(filename)
def analyze_data(data):
return data.describe()
def visualize_data(data):
return data.plot(kind='bar')
def perform_advanced_analysis(data):
"""Performs advanced statistical analysis on the dataset"""
results = {}
results['correlation'] = data.corr()
results['skew'] = data.skew()
return results" > analysis.py
# Commit the changes
git add analysis.py
git commit -m "Add advanced analysis function"
Nu kunnen we onze featurebranch vergelijken met de main-branch:
git diff main feature/advanced-analytics
Dit commando toont alle verschillen tussen de twee branches — elk bestand dat is gewijzigd, toegevoegd of verwijderd. Je ziet de wijzigingen die we in analysis.py hebben aangebracht, inclusief de nieuwe imports en functie (druk meerdere keren op Enter omdat de volledige diff in de terminal wordt afgebroken).

Om met een specifieke commit te vergelijken, kun je de commit-hash gebruiken:
git log --oneline # Find the commit hash you want to compare with

git diff 7b3105e # Replace 7b3105e with the actual commit hash you want to compare
Deze vergelijkingsmogelijkheid is goud waard wanneer je:
- Je voorbereidt op code reviews door alle wijzigingen in een featurebranch te bekijken
- Checkt welke wijzigingen de branch van een collega zou introduceren vóór het mergen
- Begrijpt hoe je codebase is geëvolueerd tussen releases of versies
Specifieke bestanden vergelijken
In grote repositories wil je vaak focussen op wijzigingen in specifieke bestanden of mappen in plaats van alle verschillen te zien. Git diff maakt dit eenvoudig door paden te kunnen opgeven.
Laten we meerdere bestanden wijzigen:
# Update config.txt
echo "DEBUG=True
DATABASE_PATH=./data/
LOG_LEVEL=INFO" > config.txt
# Update utils.py
echo "def normalize_data(data):
return (data - data.min()) / (data.max() - data.min())
def clean_data(data):
return data.dropna()" > utils.py
Om alleen de wijzigingen in het configuratiebestand te zien:
git diff config.txt
Of om een specifiek bestand tussen branches te vergelijken:
# Compare analysis.py file between main and feature/advanced-analytics branches
git diff main feature/advanced-analytics -- analysis.py
De -- in het bovenstaande commando helpt Git onderscheid maken tussen referenties en bestandspaden. Dit is vooral handig wanneer:
- Je werkt in repositories met veel bestanden maar je op specifieke componenten focust (wat vaak het geval is)
- Je wilt controleren hoe configuratie is veranderd over branches heen
- Je alleen de belangrijkste bestanden wilt reviewen in een grote set wijzigingen
Contextuele diff-opties
Git diff biedt diverse opties om aan te passen hoe verschillen worden weergegeven, waardoor het makkelijker wordt om je te richten op betekenisvolle wijzigingen.
Bijvoorbeeld: bij codeformattering kunnen witruimteverschillen belangrijke semantische wijzigingen aan het zicht onttrekken. Laten we dit demonstreren met een formatteringswijziging:
# Make a whitespace change to analysis.py
sed -i '' 's/ return/ return/g' analysis.py # Reduce indentation
Met de standaard git diff-vergelijking zie je nu witruimtewijzigingen (let op de verschoven return-statements):
git diff analysis.py
# OUT:
--- a/analysis.py
+++ b/analysis.py
@@ -2,17 +2,17 @@ import pandas as pd
import numpy as np
def load_data(filename):
- return pd.read_csv(filename)
+ return pd.read_csv(filename)
def analyze_data(data):
- return data.describe()
+ return data.describe()
def visualize_data(data):
- return data.plot(kind='bar')
+ return data.plot(kind='bar')
def perform_advanced_analysis(data):
Performs advanced statistical analysis on the dataset
results = {}
results['correlation'] = data.corr()
results['skew'] = data.skew()
- return results
+ return results
Maar we kunnen witruimtewijzigingen negeren (dit toont geen wijzigingen, omdat we alleen witruimte hebben verwijderd):
git diff -w analysis.py # or --ignore-all-space
Een andere nuttige optie is het aantal contextregels bepalen — de ongewijzigde regels rondom aanpassingen:
git diff -U1 analysis.py # Show only 1 line of context (default is 3)
git diff -U5 analysis.py # Show 5 lines of context
Deze contextopties zijn vooral waardevol wanneer je:
- Code reviewt die door een automatische formatter is gehaald
- Je wilt focussen op functionele wijzigingen in plaats van stijlaanpassingen
- Meer context nodig hebt om een specifieke wijziging te begrijpen
- Werkt met grote bestanden waar de standaardcontext te veel output zou geven
Door deze intermediaire technieken in de vingers te krijgen, krijg je veel fijnmaziger controle over hoe je wijzigingen bekijkt en begrijpt, waardoor je ontwikkelworkflow efficiënter wordt en je code reviews effectiever.
Laten we de laatste wijzigingen committen voordat we doorgaan naar geavanceerde toepassingen van git diff:
git add .
git commit -m "Modify analysis.py, config.txt, and utils.py"
Geavanceerde toepassingen van Git diff
Voortbouwend op onze intermediaire technieken verkennen we nu enkele geavanceerde toepassingen die je Git-vaardigheden naar een hoger niveau tillen. Deze technieken zijn vooral nuttig bij complexe codebases of samenwerking met grotere teams.
Externe diff-tools gebruiken
Hoewel de ingebouwde diff van Git krachtig is, biedt een visuele diff-tool soms meer helderheid, zeker bij complexe wijzigingen. Git laat je externe tools configureren om je diff-ervaring te verbeteren.
Laten we een populaire visuele diff-tool instellen. We gebruiken VSCode als voorbeeld, maar een vergelijkbare configuratie werkt voor tools als Beyond Compare, Meld of KDiff3:
# Configure Git to use VSCode as the diff tool (project-specific)
git config diff.tool vscode
git config difftool.vscode.cmd "code --wait --diff \$LOCAL \$REMOTE"
# To use other popular tools, you could use:
# For Beyond Compare (project-specific):
git config diff.tool bc3
git config difftool.bc3.path "/path/to/beyond/compare"
# Installation commands:
# For Beyond Compare:
# On macOS: brew install --cask beyond-compare
# On Ubuntu: sudo apt-get install beyond-compare
# On Windows: Download from https://www.scootersoftware.com/download.php
# Note: To apply these settings globally instead of just the current project,
# add the --global flag to each command, for example:
# git config --global diff.tool vscode
In plaats van git diff kun je nu gebruiken:
git difftool main feature/advanced-analytics
Dit opent je geconfigureerde visuele diff-tool om de wijzigingen te tonen. Zo ziet Beyond Compare eruit:

Visuele diff-tools bieden meerdere voordelen:
- Neven-elkaar-vergelijking die context makkelijker maakt
- Syntax highlighting die aansluit bij je editorvoorkeuren
- Geavanceerde navigatie tussen wijzigingen
- Mogelijkheid om bestanden direct te bewerken tijdens het reviewen
Bij het reviewen van grote wijzigingen of bestanden met complexe structuren (zoals geneste JSON of XML) kunnen visuele diff-tools het begrip en de efficiëntie aanzienlijk verbeteren.
Gespecialiseerde diff-commando’s
Git biedt gespecialiseerde diff-commando’s die je fijnmazige controle geven voor specifieke use-cases. Laten we enkele van deze krachtige commando’s verkennen:
git diff-tree bekijkt verschillen tussen tree-objecten (mappen):
# Get the hash of the last two commits
LAST_COMMIT=$(git rev-parse HEAD)
PREV_COMMIT=$(git rev-parse HEAD~1)
# Show changes in the last commit
git diff-tree --patch $PREV_COMMIT $LAST_COMMIT
git diff-index vergelijkt de working tree met de index (staging area) of een tree:
# Compare working directory with the index
git diff-index --patch HEAD
git diff-index is bijzonder nuttig voor scripting en automatisering. Je kunt er programmatisch mee controleren welke wijzigingen in je volgende commit zouden komen, wat waardevol is voor pre-commit hooks en validatiescripts.
Je zou het bijvoorbeeld in een CI/CD-pipeline kunnen gebruiken om te verifiëren dat bepaalde bestanden niet zijn aangepast, of om zeker te stellen dat configuratiewijzigingen specifieke patronen volgen voordat commits worden toegestaan.
git diff-files toont wijzigingen tussen bestanden in de Working Directory en de index:
# Check differences for specific files
git diff-files --patch config.txt
Deze gespecialiseerde commando’s zijn vooral nuttig voor:
- Aangepaste Git-workflows en scripts bouwen
- Issues debuggen met de interne werking van Git
- Gerichte analyse van de repositorytoestand
- Automatiseringstools bouwen die met Git interacteren
Codegeschiedenis analyseren
Een van de krachtigste toepassingen van git diff is analyseren hoe code in de tijd is geëvolueerd, wat cruciaal kan zijn voor debuggen of het begrijpen van featureontwikkeling.
Laten we een specifieke commit bekijken met de speciale notatie ^!:
# Get the hash of our advanced analytics commit
ANALYTICS_COMMIT=$(git log --oneline | grep "advanced analysis" | cut -d ' ' -f 1)
# Show only changes introduced in that specific commit
git diff $ANALYTICS_COMMIT^!
De syntaxis ^! is een afkorting om een commit met zijn parent te vergelijken, zodat je precies ziet wat er in alleen die commit is veranderd.
Om te traceren hoe een specifiek bestand in de tijd is veranderd:
# Analyze how analysis.py changed over the last 3 commits
git log -p -3 analysis.py
Bij het zoeken naar een bug kun je git diff met git bisect gebruiken:
# Add a bug to simulate a regression
echo "import pandas as pd
import numpy as np
def load_data(filename):
# Bug: accidentally returning None instead of the data
pd.read_csv(filename)
return None
def analyze_data(data):
return data.describe()
def visualize_data(data):
return data.plot(kind='bar')
def perform_advanced_analysis(data):
results = {}
results['correlation'] = data.corr()
results['skew'] = data.skew()
return results" > analysis.py
git add analysis.py
git commit -m "Update analysis.py with a hidden bug"
# Now use git bisect to find when the bug was introduced
git bisect start
git bisect bad # Mark current commit as containing the bug
git bisect good main # Mark the main branch as working correctly
# Git will check out commits for you to test
# Once found, you can examine the exact change that introduced the bug
git diff HEAD^!
Git bisect is een krachtig debugtool dat een binaire zoekopdracht uitvoert door je commitgeschiedenis om te vinden welke commit een bug heeft geïntroduceerd. In combinatie met git diff ontstaat een efficiënte workflow:
1. Start het bisect-proces met git bisect start
2. Markeer de huidige commit als bad (bevat de bug) met git bisect bad
3. Markeer een bekende goede commit (waar de bug niet bestaat) met git bisect good <commit-hash>
4. Git checkt automatisch een commit halverwege je geschiedenis uit om te testen.
5. Nadat je de huidige commit hebt getest, vertel je git het resultaat:
- Als de bug in deze commit aanwezig is:
git bisect bad - Als de bug niet aanwezig is in deze commit:
git bisect good
6. Git blijft verschillende commits uitchecken op basis van je feedback (na elke git bisect bad/good-opdracht), en verkleint telkens de zoekruimte. Herhaal het testen en markeren totdat git de eerste slechte commit identificeert.
7. Zodra git de problematische commit vindt, verschijnt een melding met welke commit de bug heeft geïntroduceerd.
8. Bekijk exact wat er in die commit is veranderd met: git diff HEAD^!
9. Dit commando laat je precies zien welke code is aangepast in de commit die de bug introduceerde, zodat je je debug-inspanning op die specifieke wijzigingen kunt richten.
10. Stop op elk moment met bisecten met: git bisect reset Dit brengt je terug naar de branch waarop je zat voordat je begon met bisect.
11. Je kunt het bisect-proces ook automatiseren met: git bisect run <test-script> Waarbij de opdracht 0 retourneert voor goede commits en een niet-nulwaarde voor foute commits.
Deze workflow verkort de debugtijd drastisch, vooral in grote codebases met veel commits tussen een werkende en een kapotte toestand.
Deze technieken voor geschiedenisanalyse zijn van onschatbare waarde voor:
- Achterhalen wanneer en waarom een bug werd geïntroduceerd
- De evolutie van een feature of component begrijpen
- Wijzigingen auditen voor securityreviews
- Het documenteren van de besluitvorming achter codewijzigingen
Door deze geavanceerde git diff-toepassingen te beheersen, kun je de geschiedenis van je project met precisie doorlopen, issues efficiënter debuggen en diepere inzichten krijgen in de evolutie van je codebase.
Git diff-commandoreferentie
Git diff biedt een breed scala aan opties om de output en het gedrag voor specifieke situaties aan te passen. Hier is een uitgebreid overzicht van de meest gebruikte parameters om je differ-analyse te verbeteren:
Basisvergelijkingsopties
git diff- Vergelijk Working Directory met Staging Areagit diff --staged(of--cached) - Vergelijk Staging Area met laatste commitgit diff HEAD- Vergelijk Working Directory met laatste commitgit diff <commit>- Vergelijk Working Directory met een specifieke commitgit diff <commit1> <commit2>- Vergelijk twee specifieke commitsgit diff <branch1> <branch2>- Vergelijk twee branches
Paden beperken
git diff -- <path>- Beperk de vergelijking tot een specifiek bestand of mapgit diff --stat- Toon een samenvatting van wijzigingen (aantal gewijzigde bestanden, toevoegingen, verwijderingen), een zeer nuttige optie bij grote diffsgit diff --name-only- Toon alleen de namen van gewijzigde bestandengit diff --name-status- Toon namen en status (toegevoegd, gewijzigd, verwijderd) van bestanden
Weergave regelen
git diff -w(of --ignore-all-space) - Negeer witruimtewijzigingengit diff --ignore-space-change- Negeer veranderingen in de hoeveelheid witruimtegit diff --color-words- Toon woordniveauverschillen met kleurgit diff --word-diff- Toon woordniveauverschillen in een ander formaatgit diff -U<n>- Toon n regels context (standaard is 3)git diff --no-prefix- Laat de voorvoegsels a/ en b/ in de diff-output weg
Inhoud filteren
git diff --binary- Toon wijzigingen in binaire bestandengit diff -S<string>- Zoek naar wijzigingen die de opgegeven string toevoegen of verwijderengit diff -G<regex>- Zoek naar wijzigingen die overeenkomen met het opgegeven regex-patroongit diff --pickaxe-all- Toon, bij gebruik van -S of -G, alle wijzigingen in het bestand in plaats van alleen de overeenkomende
Formaatopties
git diff --patch-with-stat- Toon patch plus statssamenvattinggit diff --compact-summary- Toon statssamenvatting in compact formaatgit diff --numstat- Toon stats in een machinevriendelijk formaatgit diff --summary- Toon samenvatting van aanmaak/verwijdering
Deze opties kun je combineren om krachtige, gerichte vergelijkingen te maken. Bijvoorbeeld, om woordniveauwijzigingen in een specifiek bestand te zien terwijl je witruimte negeert:
git diff --color-words -w -- analysis.py
Of om alle plekken te vinden waar een specifieke functie mogelijk is toegevoegd of verwijderd:
git diff -S"def perform_advanced_analysis" main feature/advanced-analytics
Door deze opties te begrijpen, kun je door ruis heen snijden en je precies richten op de wijzigingen die ertoe doen, waardoor je code review- en analyseworkflows efficiënter worden. Of je nu op jacht bent naar bugs, je voorbereidt op een pull request of gewoon wilt begrijpen wat er is veranderd, de juiste git diff-optie maakt je taak aanzienlijk makkelijker.
Conclusie
In dit artikel hebben we git diff verkend als een veelzijdig commando om codewijzigingen te bekijken. We hebben behandeld hoe je werkbestanden vergelijkt met gestagede wijzigingen, verschillen tussen branches en commits bekijkt, en gespecialiseerde commando’s inzet voor diepere inzichten. Door git diff in je workflow op te nemen, bouw je schonere commits, vang je issues vroegtijdig af en faciliteer je betere code reviews.
Of je nu solo werkt of in een team, het beheersen van git diff tilt je van alleen code schrijven naar het echt begrijpen hoe je codebase zich in de tijd ontwikkelt.
Wil je je Git-expertise verder opbouwen? Bekijk dan deze waardevolle bronnen:
- De uitgebreide Git Cheat Sheet als snel naslagwerk
- Introduction to Git voor beginners die de fundamenten willen verstevigen
- De praktische GitHub and Git Tutorial for Beginners voor hands-on leren
- Intermediate Git om je vaardigheden uit te bouwen met branchingstrategieën en samenwerkingstechnieken
- Foundations of Git voor diepere inzichten in Git’s interne model en geavanceerde workflows.
Deze bronnen helpen je voort te bouwen op wat je over git diff hebt geleerd en tillen je versiebeheervaardigheden naar het volgende niveau.
Git diff: veelgestelde vragen
Wat is het verschil tussen git diff en git diff --staged?
git diff laat wijzigingen zien tussen je Working Directory en Staging Area (ongestagede wijzigingen), terwijl git diff --staged wijzigingen toont tussen je Staging Area en de laatste commit (wat hierna gecommit wordt).
Hoe kan ik wijzigingen tussen twee branches vergelijken?
Gebruik git diff branch1 branch2 om alle verschillen tussen branches te zien. Voeg om specifieke bestanden te vergelijken -- path/to/file toe na de branchnamen.
Hoe negeer ik witruimtewijzigingen in git diff?
Gebruik git diff -w of git diff --ignore-all-space om alle witruimtewijzigingen te negeren, zodat je je kunt focussen op inhoudelijke codeverschillen in plaats van op opmaak.
Kan ik git diff gebruiken om te vinden wanneer een specifieke wijziging is geïntroduceerd?
Ja! Gebruik git diff -S"search string" om te vinden wanneer tekst is toegevoegd/verwijderd, of combineer met git log -p om de evolutie van specifieke code te zien. Voor het pinpointen van bugs is git bisect in combinatie met diff erg krachtig.
Hoe kan ik git diff visueler bekijken?
Configureer externe diff-tools met git config diff.tool <toolname> om visuele diff-applicaties zoals VSCode, Beyond Compare of Meld te gebruiken, die neven-elkaarvergelijkingen met betere visualisatie bieden.
Ik ben een contentmaker op het gebied van data science met meer dan 2 jaar ervaring en een van de grootste achterbannen op Medium. Ik schrijf graag uitgebreide artikelen over AI en ML met een vleugje sarcastische stijl, want je moet toch íets doen om ze wat minder saai te maken. Ik heb meer dan 130 artikelen en een DataCamp-cursus gemaakt, en er is nog een nieuwe in de maak. Mijn content is door meer dan 5 miljoen paar ogen gezien, van wie 20k volgers werden op zowel Medium als LinkedIn.

