Git kannst du lernen.
Commit, Branch, Merge, Remote, Fork, Pull Request und Deployment. Dieser Lernpfad erklärt zuerst das Modell hinter Git und danach die Befehle. Wer das Modell kennt, braucht keine Befehlslisten.
Das Spiel: Die Hüter der Historie01Was Git macht
Die Grundidee in einem Satz
Git ist ein System, das Zustände deines Projekts speichert und dir erlaubt, jederzeit zu jedem gespeicherten Zustand zurückzukehren. Gespeichert wird das gesamte Projekt zu einem bestimmten Zeitpunkt.
Der Vergleich mit bericht_final_v2_wirklich_final.docx hilft: dieses Chaos löst Git. Statt Dateinamen zu verwalten, hast du eine Kette von Zuständen mit Zeitstempel, Autor und Beschreibung.
Drei Eigenschaften, die alles erklären
Snapshots
Jeder Commit ist ein vollständiges Abbild des Projekts. Unveränderte Dateien werden intern referenziert, nicht kopiert.
Verteilt
Jede Kopie enthält die komplette Historie. Du kannst offline arbeiten, committen und die Vergangenheit durchsuchen.
Unveränderlich
Jeder Commit hat eine Prüfsumme. Ändert sich der Inhalt, ändert sich die Prüfsumme. Historie lässt sich nicht unbemerkt manipulieren.
Git ist das Programm auf deinem Computer. GitHub ist eine Website, die Git-Repositories speichert und Zusammenarbeit ergänzt. Git funktioniert komplett ohne GitHub. Alternativen sind GitLab, Bitbucket oder ein eigener Server.
Das mentale Bild: eine Kette von Commits
Jeder Commit kennt seinen Vorgänger. Daraus entsteht eine lückenlose Kette. HEAD ist der Zeiger auf den Stand, an dem du gerade arbeitest.
02Einrichten und starten
Einmalige Konfiguration und der erste Schritt in ein Projekt
Identität setzen
Jeder Commit trägt einen Namen und eine E-Mail-Adresse. Das machst du einmal pro Computer.
# Name und Mail für alle Repositories auf diesem Rechner
git config --global user.name "Vorname Nachname"
git config --global user.email "du@beispiel.ch"
# Standardname des Hauptbranches
git config --global init.defaultBranch main
# Kontrolle
git config --listZwei Wege in ein Projekt
# Weg 1: bestehenden Ordner unter Versionskontrolle stellen
cd mein-projekt
git init
# Weg 2: bestehendes Repository von GitHub kopieren
git clone https://github.com/benutzer/projekt.gitgit init legt einen versteckten Ordner .git an. Darin liegt die komplette Historie. Löschst du diesen Ordner, ist die Versionsgeschichte weg, die Dateien bleiben.
.gitignore anlegen
Nicht alles gehört in die Historie. Generierte Dateien, Abhängigkeiten und Geheimnisse bleiben draussen.
# Abhängigkeiten
node_modules/
vendor/
# Build-Ergebnisse
dist/
build/
# Geheimnisse und lokale Konfiguration
.env
.env.local
*.key
# Systemdateien
.DS_Store
Thumbs.dbEin einmal committetes Passwort bleibt in der Historie, auch wenn du es in einem späteren Commit löschst. Der einzige richtige Schritt ist: Zugangsdaten sofort ungültig machen und neu ausstellen.
03Die drei Bereiche
Das Konzept, an dem die meisten Anfänger scheitern
Eine Änderung durchläuft in Git drei Stationen. Wer diese drei Bereiche verstanden hat, versteht neunzig Prozent der alltäglichen Befehle.
| Bereich | Was dort liegt | Wie du etwas hinbringst |
|---|---|---|
| Arbeitsverzeichnis | Die Dateien, die du im Editor siehst und bearbeitest | Durch Speichern im Editor |
| Staging Area | Die Auswahl der Änderungen, die in den nächsten Commit sollen | git add |
| Repository | Die dauerhafte Historie aller Commits | git commit |
Du hast an drei Stellen gearbeitet: einen Fehler behoben, einen Text korrigiert und ein Feature begonnen. Statt alles in einen unübersichtlichen Commit zu packen, wählst du aus und erzeugst drei saubere, nachvollziehbare Commits.
# Wo steht was gerade
git status
# Einzelne Datei vormerken
git add index.html
# Alles vormerken
git add .
# Interaktiv einzelne Abschnitte einer Datei auswählen
git add -p
# Aus der Staging Area zurücknehmen, Änderung bleibt erhalten
git restore --staged index.html04Der Commit
Der wichtigste Vorgang in Git
Ein Commit friert den Inhalt der Staging Area dauerhaft ein und ergänzt ihn um Autor, Zeitstempel, Nachricht und einen Verweis auf den vorherigen Commit. Er erhält eine eindeutige Prüfsumme, den Hash, zum Beispiel a1b2c3d.
# Commit mit kurzer Nachricht
git commit -m "Login-Formular validiert Eingaben"
# Alle bereits bekannten Dateien vormerken und committen
git commit -am "Tippfehler in der Navigation korrigiert"
# Letzten Commit korrigieren, solange er nicht gepusht ist
git commit --amendGute Commit-Nachrichten
Die Nachricht ist für die Person gedacht, die in sechs Monaten wissen will, warum etwas geändert wurde. Bewährt hat sich: Betreffzeile unter 50 Zeichen, im Imperativ, ohne Punkt am Ende. Bei Bedarf folgt nach einer Leerzeile die Begründung.
| Schwach | Besser | Grund |
|---|---|---|
update | Preisberechnung auf Bruttowerte umgestellt | Sagt, was sich geändert hat |
fix | Absturz beim leeren Warenkorb behoben | Beschreibt das Problem |
diverse Sachen | Drei einzelne Commits | Ein Commit, ein Gedanke |
Conventional Commits
Viele Teams nutzen ein festes Präfix, weil sich daraus automatisch Changelogs erzeugen lassen.
feat: Export als PDF ergänzt
fix: Datumsformat in der Rechnungsliste korrigiert
docs: Installationsanleitung aktualisiert
refactor: Preislogik in eigenes Modul ausgelagert
test: Testfälle für Rabattberechnung ergänzt
chore: Abhängigkeiten aktualisiertEin Commit sollte für sich allein funktionieren und rückgängig gemacht werden können, ohne dass anderes kaputtgeht. Wenn du in der Nachricht das Wort «und» brauchst, sind es meist zwei Commits.
05Historie lesen
Nachvollziehen, was wann von wem geändert wurde
# Vollständige Historie
git log
# Kompakt, eine Zeile pro Commit
git log --oneline
# Mit grafischer Darstellung der Branches
git log --oneline --graph --all
# Nur eine bestimmte Datei
git log -p src/preise.js
# Wer hat welche Zeile geschrieben
git blame src/preise.js
# Unterschiede zum letzten Commit
git diff
# Unterschiede der vorgemerkten Änderungen
git diff --staged
# Einen bestimmten Commit ansehen
git show a1b2c3dgit blame klingt nach Schuldzuweisung, ist aber ein Recherchewerkzeug: es zeigt zu jeder Zeile den Commit, aus dem sie stammt. Von dort kommst du zur Begründung.
06Branches
Parallel arbeiten, ohne den Hauptstand zu gefährden
Ein Branch ist technisch nur ein Zeiger auf einen Commit. Deshalb ist das Erstellen eines Branches in Git sofort erledigt und kostet praktisch nichts. Der Hauptbranch heisst heute meist main, in älteren Projekten master.
# Alle Branches anzeigen
git branch
# Branch erstellen und direkt wechseln
git switch -c feature/suche
# Zwischen Branches wechseln
git switch main
# Ältere Schreibweise, macht dasselbe
git checkout -b feature/suche
# Branch umbenennen
git branch -m alter-name neuer-name
# Zusammengeführten Branch löschen
git branch -d feature/sucheNamenskonventionen
feature/kundenexportfür neue Funktionenfix/login-absturzfür Fehlerbehebungenhotfix/zahlungsfehlerfür dringende Korrekturen an der laufenden Versiondocs/readmefür reine Dokumentation
Erstelle einen neuen Branch immer von einem frischen main. Sonst arbeitest du auf einem veralteten Stand und erzeugst unnötige Konflikte.
07Merge und Rebase
Zwei Wege, Arbeit zusammenzuführen
Merge
Merge führt zwei Entwicklungslinien zusammen und erzeugt dabei in der Regel einen zusätzlichen Merge-Commit. Die Historie bleibt so, wie es passiert ist, inklusive der Verzweigungen.
# Auf den Zielbranch wechseln
git switch main
# Aktuellen Stand holen
git pull
# Feature-Branch hineinführen
git merge feature/sucheRebase
Rebase setzt deine Commits neu auf die Spitze des Zielbranches. Das Ergebnis ist eine gerade Linie ohne Verzweigungen. Die Commits werden dabei neu erzeugt und erhalten neue Prüfsummen.
# Eigenen Branch auf den aktuellen main setzen
git switch feature/suche
git rebase main
# Letzte drei Commits aufräumen, zusammenfassen, umbenennen
git rebase -i HEAD~3Niemals einen Branch rebasen, den andere bereits verwenden. Da die Commits neu erzeugt werden, weicht die Historie deiner Kolleginnen und Kollegen ab und es entsteht Chaos. Rebase gehört auf deinen eigenen, noch nicht geteilten Branch.
| Merge | Rebase | |
|---|---|---|
| Historie | Verzweigt, entspricht dem realen Ablauf | Linear, gut lesbar |
| Commits | Bleiben unverändert | Werden neu erzeugt |
| Geeignet für | Geteilte Branches, Pull Requests | Eigene Branches vor dem Teilen |
| Risiko | Gering | Historie kann für andere brechen |
08Konflikte lösen
Eine Rückfrage von Git, kein Fehler
Git führt parallele Änderungen selbständig zusammen, solange sie unterschiedliche Zeilen betreffen. Ein Konflikt entsteht nur, wenn zwei Branches dieselbe Zeile unterschiedlich verändert haben. Git kann dann nicht entscheiden und fragt dich.
function berechnePreis(betrag) {
<<<<<<< HEAD
return betrag * 1.081;
=======
return betrag * 1.077;
>>>>>>> feature/mwst-anpassung
}- Zwischen
<<<<<<< HEADund=======steht deine Version. - Zwischen
=======und>>>>>>>steht die Version des anderen Branches. - Du entscheidest, was gilt, und löschst alle Markierungszeilen.
# Welche Dateien betroffen sind
git status
# Nach dem Bearbeiten als gelöst markieren
git add preise.js
git commit
# Den ganzen Merge abbrechen und zurück zum Ausgangspunkt
git merge --abortKleine Branches, kurze Laufzeit, regelmässig main hereinholen. Je länger ein Branch lebt, desto grösser die Wahrscheinlichkeit, dass er kollidiert.
09Remote, Push und Pull
Der Weg vom eigenen Rechner zum Server
Ein Remote ist eine benannte Adresse eines anderen Repositories, meist auf GitHub. Der Standardname ist origin. Ohne Push bleibt dein Commit ausschliesslich lokal.
# Welche Remotes sind eingetragen
git remote -v
# Remote hinzufügen
git remote add origin git@github.com:benutzer/projekt.git
# Erster Push, Branch wird verknüpft
git push -u origin main
# Danach reicht
git push
# Änderungen holen, ohne sie einzubauen
git fetch
# Holen und direkt zusammenführen
git pull
# Holen und die eigenen Commits obendrauf setzen
git pull --rebase| Befehl | Was passiert |
|---|---|
git fetch | Lädt neue Commits herunter, verändert deine Dateien nicht |
git pull | fetch plus merge, verändert dein Arbeitsverzeichnis |
git push | Überträgt deine lokalen Commits zum Remote |
git clone | Kopiert ein Remote-Repository komplett auf deinen Rechner |
HTTPS oder SSH
Bei HTTPS meldest du dich mit Benutzername und einem Personal Access Token an. Bei SSH hinterlegst du einmal einen Schlüssel auf GitHub und musst dich danach nicht mehr anmelden.
# Schlüssel erzeugen
ssh-keygen -t ed25519 -C "du@beispiel.ch"
# Öffentlichen Teil anzeigen und auf GitHub hinterlegen
cat ~/.ssh/id_ed25519.pub
# Verbindung testen
ssh -T git@github.comDie Datei ohne Endung .pub ist dein privater Schlüssel. Sie bleibt auf deinem Rechner. Nur der Inhalt der .pub-Datei wird auf GitHub eingetragen.
10Was GitHub dazugibt
Die Plattform um Git herum
Git verwaltet Versionen. Alles, was mit Zusammenarbeit zu tun hat, kommt von der Plattform.
Repository
Der gehostete Projektordner mit vollständiger Historie, öffentlich oder privat.
Issues
Aufgaben, Fehler und Ideen mit Labels, Zuständigkeit und Diskussion.
Pull Requests
Antrag, einen Branch zu übernehmen, mit Code Review Zeile für Zeile.
Actions
Automatische Abläufe für Tests, Builds und Deployment bei jedem Push.
Releases
Versionierte Veröffentlichungen mit Changelog und fertigen Paketen.
Pages
Kostenloses Hosting für statische Websites direkt aus dem Repository.
README und Lizenz
Die Datei README.md wird auf der Startseite des Repositories angezeigt. Sie beantwortet drei Fragen: Was ist das, wie installiere ich es, wie benutze ich es. Ohne Lizenzdatei behalten sich die Urheber alle Rechte vor, auch bei öffentlichem Code.
11Fork und Pull Request
Mitarbeiten an Projekten, auf die du keinen Schreibzugriff hast
| Begriff | Wo | Was passiert |
|---|---|---|
| Fork | Auf GitHub | Eine eigene Kopie des Repositories unter deinem Konto |
| Clone | Auf deinem Rechner | Eine lokale Arbeitskopie eines Repositories |
| Pull Request | Auf GitHub | Der Antrag, deine Änderungen ins Original zu übernehmen |
Der komplette Ablauf
- Auf GitHub oben rechts auf Fork klicken. Du erhältst eine Kopie unter deinem Konto.
- Deinen Fork lokal klonen.
- Das Originalprojekt als zweites Remote namens
upstreameintragen. - Einen Branch für deine Änderung anlegen.
- Arbeiten, committen, in deinen Fork pushen.
- Auf GitHub den Pull Request gegen das Original eröffnen.
# 2. Den eigenen Fork klonen
git clone git@github.com:deinname/projekt.git
cd projekt
# 3. Original als upstream eintragen
git remote add upstream git@github.com:original/projekt.git
# Fork aktuell halten
git fetch upstream
git switch main
git merge upstream/main
git push origin main
# 4. bis 5. Arbeiten und hochladen
git switch -c fix/tippfehler-doku
git commit -am "Tippfehler in der Installationsanleitung korrigiert"
git push -u origin fix/tippfehler-dokuWas einen guten Pull Request ausmacht
- Ein Thema pro Pull Request. Keine drei unabhängigen Änderungen mischen.
- Beschreibung mit Kontext: was, warum, wie getestet.
- Verweis auf das zugehörige Issue, zum Beispiel
Closes #42. - Kommentare aus dem Review als Frage verstehen, nicht als Angriff.
Merge commit behält alle Einzelcommits und ergänzt einen Merge-Commit. Squash and merge fasst alles zu einem Commit zusammen und hält main aufgeräumt. Rebase and merge hängt die Commits linear an. Viele Teams nutzen Squash als Standard.
12Team-Workflows
Wie Teams ihre Branches organisieren
GitHub Flow
Der einfachste und heute verbreitetste Ansatz. main ist immer auslieferbar. Für jede Änderung entsteht ein kurzlebiger Branch, der über einen Pull Request zurückfliesst und danach gelöscht wird. Gut geeignet für Webprojekte mit häufigen Releases.
Git Flow
Älterer, formaler Ansatz mit dauerhaften Branches main und develop sowie Feature-, Release- und Hotfix-Branches. Sinnvoll bei Software mit festen Versionsständen, zum Beispiel Desktop-Anwendungen. Für die meisten Webprojekte zu schwerfällig.
Trunk Based Development
Alle arbeiten sehr nah an main, Branches leben nur Stunden. Unfertige Funktionen werden per Feature Flag ausgeblendet. Setzt eine starke Testautomatisierung voraus.
| Situation | Empfehlung |
|---|---|
| Kleines Team, Webprojekt | GitHub Flow |
| Feste Versionen, lange Releasezyklen | Git Flow |
| Grosses Team, starke Testabdeckung | Trunk Based Development |
| Alleinarbeit | Direkt auf main, Branch nur bei grösseren Umbauten |
Branch Protection
Auf GitHub lässt sich main schützen: kein direkter Push, mindestens eine Genehmigung im Review, Tests müssen grün sein. Das ist der wirksamste Schutz gegen versehentliche Fehler in der Produktion.
13Deployment verstehen
Vom Commit zur laufenden Anwendung
Deployment ist der Vorgang, bei dem dein Code auf einem Server landet und für Nutzer erreichbar wird. Git speichert Versionen, das Deployment bringt eine davon in Betrieb. Das sind zwei getrennte Schritte, auch wenn moderne Werkzeuge sie verketten.
Umgebungen
Lokal
Dein Rechner. Hier wird entwickelt und getestet.
Staging
Eine Kopie der Produktion zum Prüfen vor der Freigabe.
Produktion
Die Umgebung, die echte Nutzer sehen.
Statisch oder dynamisch
Eine statische Website besteht aus fertigen HTML-, CSS- und JS-Dateien. Das Deployment ist reines Kopieren, etwa auf GitHub Pages, Netlify oder Vercel. Eine dynamische Anwendung braucht einen laufenden Prozess und meist eine Datenbank. Das Deployment umfasst dann auch Neustart und Datenbankmigrationen.
GitHub Pages in vier Schritten
- Repository auf GitHub anlegen und Dateien pushen.
- Unter Settings zu Pages wechseln.
- Als Quelle den Branch
mainund den Ordner/rootwählen. - Nach kurzer Zeit ist die Seite unter
benutzername.github.io/projekterreichbar.
Datenbankzugänge und Schlüssel kommen aus Umgebungsvariablen, die beim Hoster hinterlegt werden. Im Repository liegt höchstens eine .env.example ohne echte Werte.
14GitHub Actions und CI/CD
Automatisierung bei jedem Push
Continuous Integration bedeutet: bei jeder Änderung laufen automatisch Tests und Prüfungen. Continuous Deployment bedeutet: was die Prüfungen besteht, wird automatisch ausgeliefert. Auf GitHub läuft beides über Workflow-Dateien im Ordner .github/workflows/.
name: Tests und Deployment
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm test
deploy:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npm run build
- name: Ausliefern
run: ./deploy.sh
env:
DEPLOY_TOKEN: ${{ secrets.DEPLOY_TOKEN }}| Begriff | Bedeutung |
|---|---|
on | Auslöser, zum Beispiel Push, Pull Request oder Zeitplan |
jobs | Arbeitspakete, die parallel laufen, sofern nichts anderes definiert ist |
needs | Abhängigkeit: deploy startet erst, wenn test erfolgreich war |
steps | Einzelne Schritte innerhalb eines Jobs |
secrets | Verschlüsselt in den Repository-Einstellungen hinterlegte Werte |
Schlüssel gehören ausschliesslich in die Repository Secrets. Ein echo eines Secrets landet im öffentlich einsehbaren Log.
15Fehler rückgängig machen
Der Abschnitt, den du in der Praxis am häufigsten brauchst
| Situation | Befehl |
|---|---|
| Änderung an einer Datei verwerfen, noch nicht vorgemerkt | git restore datei.js |
| Datei aus der Staging Area nehmen | git restore --staged datei.js |
| Letzte Commit-Nachricht korrigieren | git commit --amend |
| Letzten Commit auflösen, Änderungen behalten | git reset --soft HEAD~1 |
| Letzten Commit und Änderungen verwerfen | git reset --hard HEAD~1 |
| Bereits gepushten Commit zurückdrehen | git revert a1b2c3d |
| Arbeit kurz zur Seite legen | git stash |
| Zur Seite gelegte Arbeit zurückholen | git stash pop |
| Verlorenen Commit wiederfinden | git reflog |
reset oder revert
git reset entfernt Commits aus der Historie. Das ist in Ordnung, solange nichts gepusht wurde. git revert erzeugt einen neuen Commit, der die Änderung aufhebt. Das ist der richtige Weg für alles, was bereits geteilt ist, weil die Historie erhalten bleibt.
git reflog als Sicherheitsnetz
Git protokolliert jede Bewegung von HEAD. Fast nichts geht verloren, auch nach einem harten Reset.
# Alle Bewegungen von HEAD anzeigen
git reflog
# Zum gewünschten Zustand zurückkehren
git reset --hard HEAD@{3}git reset --hard verwirft nicht committete Arbeit unwiderruflich. git push --force überschreibt Historie auf dem Server. git clean -fd löscht alle nicht verfolgten Dateien. git branch -D löscht einen Branch, auch wenn er nicht zusammengeführt wurde. Beim Push ist --force-with-lease die sicherere Variante.
16Befehlsreferenz
40 Befehle, durchsuchbar, zum Nachschlagen im Alltag
Tippen filtert die Tabelle sofort.
| Befehl | Wirkung | Bereich |
|---|---|---|
git init | Neues Repository im aktuellen Ordner anlegen | Start |
git clone URL | Repository von einem Server kopieren | Start |
git status | Zustand von Arbeitsverzeichnis und Staging anzeigen | Alltag |
git add datei | Datei für den nächsten Commit vormerken | Alltag |
git add -p | Einzelne Abschnitte interaktiv vormerken | Alltag |
git commit -m "Text" | Vorgemerkte Änderungen dauerhaft speichern | Alltag |
git commit --amend | Letzten Commit ergänzen oder Nachricht korrigieren | Rückgängig |
git diff | Nicht vorgemerkte Änderungen anzeigen | Historie |
git diff --staged | Vorgemerkte Änderungen anzeigen | Historie |
git log --oneline --graph | Historie kompakt mit Verzweigungen | Historie |
git show HASH | Einen bestimmten Commit im Detail ansehen | Historie |
git blame datei | Herkunft jeder Zeile anzeigen | Historie |
git branch | Branches auflisten | Branch |
git switch -c name | Branch erstellen und wechseln | Branch |
git switch name | Branch wechseln | Branch |
git branch -d name | Zusammengeführten Branch löschen | Branch |
git merge branch | Anderen Branch in den aktuellen einbauen | Zusammenführen |
git merge --abort | Laufenden Merge abbrechen | Zusammenführen |
git rebase main | Eigene Commits auf main neu aufsetzen | Zusammenführen |
git rebase -i HEAD~3 | Letzte Commits interaktiv aufräumen | Zusammenführen |
git cherry-pick HASH | Einzelnen Commit in den aktuellen Branch übernehmen | Zusammenführen |
git remote -v | Eingetragene Remotes anzeigen | Remote |
git remote add name URL | Remote hinzufügen, zum Beispiel upstream | Remote |
git push -u origin main | Ersten Push mit Verknüpfung des Branches | Remote |
git push | Lokale Commits hochladen | Remote |
git push --force-with-lease | Historie überschreiben, mit Schutz vor fremden Commits | Remote |
git fetch | Änderungen holen, ohne sie einzubauen | Remote |
git pull | Holen und zusammenführen | Remote |
git pull --rebase | Holen und eigene Commits obendrauf setzen | Remote |
git restore datei | Änderung im Arbeitsverzeichnis verwerfen | Rückgängig |
git restore --staged datei | Datei aus der Staging Area nehmen | Rückgängig |
git reset --soft HEAD~1 | Commit auflösen, Änderungen behalten | Rückgängig |
git reset --hard HEAD~1 | Commit und Änderungen verwerfen | Rückgängig |
git revert HASH | Änderung durch einen neuen Commit aufheben | Rückgängig |
git reflog | Alle Bewegungen von HEAD anzeigen | Rückgängig |
git stash | Aktuelle Arbeit zwischenspeichern | Alltag |
git stash pop | Zwischengespeicherte Arbeit zurückholen | Alltag |
git tag -a v1.0 -m "Text" | Version markieren | Release |
git push --tags | Tags zum Remote übertragen | Release |
git clean -fd | Nicht verfolgte Dateien und Ordner löschen | Aufräumen |
git bisect start | Fehlerhaften Commit durch Halbierung suchen | Analyse |
17Glossar
Begriffe, die in Diskussionen und Dokumentationen vorkommen
| Begriff | Erklärung |
|---|---|
| Repository | Projektordner mit vollständiger Versionsgeschichte im Unterordner .git |
| Commit | Gespeicherter Zustand des Projekts mit Nachricht, Autor und Prüfsumme |
| Hash | Eindeutige Kennung eines Commits, meist abgekürzt auf sieben Zeichen |
| HEAD | Zeiger auf den Commit, an dem du gerade arbeitest |
| Branch | Beweglicher Zeiger auf einen Commit, ermöglicht paralleles Arbeiten |
| main | Üblicher Name des Hauptbranches, früher master |
| Staging Area | Zwischenablage für Änderungen, die in den nächsten Commit sollen |
| Remote | Benannte Adresse eines Repositories auf einem Server |
| origin | Standardname des Remotes, von dem du geklont hast |
| upstream | Üblicher Name des Original-Repositories bei einem Fork |
| Fork | Serverseitige Kopie eines Repositories unter deinem eigenen Konto |
| Clone | Lokale Kopie eines Repositories auf deinem Rechner |
| Pull Request | Antrag auf der Plattform, einen Branch zu übernehmen, inklusive Review |
| Merge | Zusammenführen zweier Entwicklungslinien |
| Rebase | Neu aufsetzen der eigenen Commits auf einen anderen Stand |
| Konflikt | Situation, in der Git zwei Änderungen an derselben Zeile nicht entscheiden kann |
| Tag | Feste Markierung eines Commits, meist für Versionsnummern |
| Stash | Zwischenablage für unfertige Arbeit ausserhalb der Historie |
| Cherry-Pick | Einzelnen Commit aus einem anderen Branch übernehmen |
| Squash | Mehrere Commits zu einem zusammenfassen |
| CI/CD | Automatisches Testen und Ausliefern bei jeder Änderung |
| Deployment | Übertragen einer Version in eine laufende Umgebung |
| Rollback | Zurücksetzen der laufenden Umgebung auf eine früher funktionierende Version |
| Monorepo | Ein Repository, das mehrere zusammengehörige Projekte enthält |
18Quiz
Zehn Fragen zur Selbstkontrolle, mit Erklärung nach jeder Antwort
+Weiterlernen
- Die Hüter der Historie, das Spiel zu diesem Lernpfad: 6 interaktive Level und eine Prüfung
- Pro Git Buch, das offizielle Handbuch, kostenlos und auf Deutsch
- Learn Git Branching, interaktive Übungen zu Branches und Merges
- GitHub Docs, Referenz zu Pull Requests, Actions und Pages
- Oh Shit, Git, Rettungswege für typische Fehlersituationen
Lege ein Übungs-Repository an, in dem nichts kaputtgehen kann. Erzeuge dort absichtlich einen Konflikt, mache einen Reset, hole einen Commit über das Reflog zurück. Zehn Minuten Ausprobieren ersetzen eine Stunde Lesen.