Kuble Lernpfad · Versionskontrolle

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 Historie
18 Kapitel 40 Befehle 10 Quizfragen Ohne Vorkenntnisse

01Was 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 nicht GitHub

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

a1b2c3d4e5f67g8h9ij0k1l2 Projektgestartet Loginergänzt Bug imFormular Textekorrigiert HEAD

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.

Terminal
# 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 --list

Zwei Wege in ein Projekt

Terminal
# 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.git

git 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.

.gitignore
# Abhängigkeiten
node_modules/
vendor/

# Build-Ergebnisse
dist/
build/

# Geheimnisse und lokale Konfiguration
.env
.env.local
*.key

# Systemdateien
.DS_Store
Thumbs.db
Wichtig

Ein 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.

Arbeits-verzeichnis deine Dateien StagingArea vorgemerkt Repository .git Ordner Historie add commit restore --staged restore git status zeigt jederzeit, wo eine Datei gerade steht
BereichWas dort liegtWie du etwas hinbringst
ArbeitsverzeichnisDie Dateien, die du im Editor siehst und bearbeitestDurch Speichern im Editor
Staging AreaDie Auswahl der Änderungen, die in den nächsten Commit sollengit add
RepositoryDie dauerhafte Historie aller Commitsgit commit
Warum die Staging Area sinnvoll ist

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.

Terminal
# 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.html

04Der 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.

Terminal
# 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 --amend

Gute 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.

SchwachBesserGrund
updatePreisberechnung auf Bruttowerte umgestelltSagt, was sich geändert hat
fixAbsturz beim leeren Warenkorb behobenBeschreibt das Problem
diverse SachenDrei einzelne CommitsEin Commit, ein Gedanke

Conventional Commits

Viele Teams nutzen ein festes Präfix, weil sich daraus automatisch Changelogs erzeugen lassen.

Beispiele
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 aktualisiert
Faustregel

Ein 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

Terminal
# 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 a1b2c3d

git 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.

main feature/suche merge
Terminal
# 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/suche

Namenskonventionen

  • feature/kundenexport für neue Funktionen
  • fix/login-absturz für Fehlerbehebungen
  • hotfix/zahlungsfehler für dringende Korrekturen an der laufenden Version
  • docs/readme für reine Dokumentation
Vor dem Branch immer aktualisieren

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.

Terminal
# Auf den Zielbranch wechseln
git switch main

# Aktuellen Stand holen
git pull

# Feature-Branch hineinführen
git merge feature/suche

Rebase

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.

Terminal
# 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~3
Die goldene Regel des Rebase

Niemals 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.

MergeRebase
HistorieVerzweigt, entspricht dem realen AblaufLinear, gut lesbar
CommitsBleiben unverändertWerden neu erzeugt
Geeignet fürGeteilte Branches, Pull RequestsEigene Branches vor dem Teilen
RisikoGeringHistorie 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.

preise.js mit Konflikt
function berechnePreis(betrag) {
<<<<<<< HEAD
  return betrag * 1.081;
=======
  return betrag * 1.077;
>>>>>>> feature/mwst-anpassung
}
  • Zwischen <<<<<<< HEAD und ======= steht deine Version.
  • Zwischen ======= und >>>>>>> steht die Version des anderen Branches.
  • Du entscheidest, was gilt, und löschst alle Markierungszeilen.
Terminal
# 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 --abort
Konflikte vermeiden

Kleine 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.

Terminal
# 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
BefehlWas passiert
git fetchLädt neue Commits herunter, verändert deine Dateien nicht
git pullfetch plus merge, verändert dein Arbeitsverzeichnis
git pushÜberträgt deine lokalen Commits zum Remote
git cloneKopiert 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.

SSH-Schlüssel einrichten
# 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.com
Nie weitergeben

Die 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

BegriffWoWas passiert
ForkAuf GitHubEine eigene Kopie des Repositories unter deinem Konto
CloneAuf deinem RechnerEine lokale Arbeitskopie eines Repositories
Pull RequestAuf GitHubDer Antrag, deine Änderungen ins Original zu übernehmen

Der komplette Ablauf

  1. Auf GitHub oben rechts auf Fork klicken. Du erhältst eine Kopie unter deinem Konto.
  2. Deinen Fork lokal klonen.
  3. Das Originalprojekt als zweites Remote namens upstream eintragen.
  4. Einen Branch für deine Änderung anlegen.
  5. Arbeiten, committen, in deinen Fork pushen.
  6. Auf GitHub den Pull Request gegen das Original eröffnen.
Terminal
# 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-doku

Was 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-Strategien im Pull Request

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.

SituationEmpfehlung
Kleines Team, WebprojektGitHub Flow
Feste Versionen, lange ReleasezyklenGit Flow
Grosses Team, starke TestabdeckungTrunk Based Development
AlleinarbeitDirekt 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.

commit push TestsCI Build Produktionlive Bei CI/CD läuft alles ab push automatisch

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

  1. Repository auf GitHub anlegen und Dateien pushen.
  2. Unter Settings zu Pages wechseln.
  3. Als Quelle den Branch main und den Ordner /root wählen.
  4. Nach kurzer Zeit ist die Seite unter benutzername.github.io/projekt erreichbar.
Konfiguration gehört nicht in den Code

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/.

.github/workflows/ci.yml
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 }}
BegriffBedeutung
onAuslöser, zum Beispiel Push, Pull Request oder Zeitplan
jobsArbeitspakete, die parallel laufen, sofern nichts anderes definiert ist
needsAbhängigkeit: deploy startet erst, wenn test erfolgreich war
stepsEinzelne Schritte innerhalb eines Jobs
secretsVerschlüsselt in den Repository-Einstellungen hinterlegte Werte
Secrets nie im Workflow ausgeben

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

SituationBefehl
Änderung an einer Datei verwerfen, noch nicht vorgemerktgit restore datei.js
Datei aus der Staging Area nehmengit restore --staged datei.js
Letzte Commit-Nachricht korrigierengit commit --amend
Letzten Commit auflösen, Änderungen behaltengit reset --soft HEAD~1
Letzten Commit und Änderungen verwerfengit reset --hard HEAD~1
Bereits gepushten Commit zurückdrehengit revert a1b2c3d
Arbeit kurz zur Seite legengit stash
Zur Seite gelegte Arbeit zurückholengit stash pop
Verlorenen Commit wiederfindengit 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.

Terminal
# Alle Bewegungen von HEAD anzeigen
git reflog

# Zum gewünschten Zustand zurückkehren
git reset --hard HEAD@{3}
Vier gefährliche Befehle

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.

BefehlWirkungBereich
git initNeues Repository im aktuellen Ordner anlegenStart
git clone URLRepository von einem Server kopierenStart
git statusZustand von Arbeitsverzeichnis und Staging anzeigenAlltag
git add dateiDatei für den nächsten Commit vormerkenAlltag
git add -pEinzelne Abschnitte interaktiv vormerkenAlltag
git commit -m "Text"Vorgemerkte Änderungen dauerhaft speichernAlltag
git commit --amendLetzten Commit ergänzen oder Nachricht korrigierenRückgängig
git diffNicht vorgemerkte Änderungen anzeigenHistorie
git diff --stagedVorgemerkte Änderungen anzeigenHistorie
git log --oneline --graphHistorie kompakt mit VerzweigungenHistorie
git show HASHEinen bestimmten Commit im Detail ansehenHistorie
git blame dateiHerkunft jeder Zeile anzeigenHistorie
git branchBranches auflistenBranch
git switch -c nameBranch erstellen und wechselnBranch
git switch nameBranch wechselnBranch
git branch -d nameZusammengeführten Branch löschenBranch
git merge branchAnderen Branch in den aktuellen einbauenZusammenführen
git merge --abortLaufenden Merge abbrechenZusammenführen
git rebase mainEigene Commits auf main neu aufsetzenZusammenführen
git rebase -i HEAD~3Letzte Commits interaktiv aufräumenZusammenführen
git cherry-pick HASHEinzelnen Commit in den aktuellen Branch übernehmenZusammenführen
git remote -vEingetragene Remotes anzeigenRemote
git remote add name URLRemote hinzufügen, zum Beispiel upstreamRemote
git push -u origin mainErsten Push mit Verknüpfung des BranchesRemote
git pushLokale Commits hochladenRemote
git push --force-with-leaseHistorie überschreiben, mit Schutz vor fremden CommitsRemote
git fetchÄnderungen holen, ohne sie einzubauenRemote
git pullHolen und zusammenführenRemote
git pull --rebaseHolen und eigene Commits obendrauf setzenRemote
git restore dateiÄnderung im Arbeitsverzeichnis verwerfenRückgängig
git restore --staged dateiDatei aus der Staging Area nehmenRückgängig
git reset --soft HEAD~1Commit auflösen, Änderungen behaltenRückgängig
git reset --hard HEAD~1Commit und Änderungen verwerfenRückgängig
git revert HASHÄnderung durch einen neuen Commit aufhebenRückgängig
git reflogAlle Bewegungen von HEAD anzeigenRückgängig
git stashAktuelle Arbeit zwischenspeichernAlltag
git stash popZwischengespeicherte Arbeit zurückholenAlltag
git tag -a v1.0 -m "Text"Version markierenRelease
git push --tagsTags zum Remote übertragenRelease
git clean -fdNicht verfolgte Dateien und Ordner löschenAufräumen
git bisect startFehlerhaften Commit durch Halbierung suchenAnalyse

17Glossar

Begriffe, die in Diskussionen und Dokumentationen vorkommen

BegriffErklärung
RepositoryProjektordner mit vollständiger Versionsgeschichte im Unterordner .git
CommitGespeicherter Zustand des Projekts mit Nachricht, Autor und Prüfsumme
HashEindeutige Kennung eines Commits, meist abgekürzt auf sieben Zeichen
HEADZeiger auf den Commit, an dem du gerade arbeitest
BranchBeweglicher Zeiger auf einen Commit, ermöglicht paralleles Arbeiten
mainÜblicher Name des Hauptbranches, früher master
Staging AreaZwischenablage für Änderungen, die in den nächsten Commit sollen
RemoteBenannte Adresse eines Repositories auf einem Server
originStandardname des Remotes, von dem du geklont hast
upstreamÜblicher Name des Original-Repositories bei einem Fork
ForkServerseitige Kopie eines Repositories unter deinem eigenen Konto
CloneLokale Kopie eines Repositories auf deinem Rechner
Pull RequestAntrag auf der Plattform, einen Branch zu übernehmen, inklusive Review
MergeZusammenführen zweier Entwicklungslinien
RebaseNeu aufsetzen der eigenen Commits auf einen anderen Stand
KonfliktSituation, in der Git zwei Änderungen an derselben Zeile nicht entscheiden kann
TagFeste Markierung eines Commits, meist für Versionsnummern
StashZwischenablage für unfertige Arbeit ausserhalb der Historie
Cherry-PickEinzelnen Commit aus einem anderen Branch übernehmen
SquashMehrere Commits zu einem zusammenfassen
CI/CDAutomatisches Testen und Ausliefern bei jeder Änderung
DeploymentÜbertragen einer Version in eine laufende Umgebung
RollbackZurücksetzen der laufenden Umgebung auf eine früher funktionierende Version
MonorepoEin Repository, das mehrere zusammengehörige Projekte enthält

18Quiz

Zehn Fragen zur Selbstkontrolle, mit Erklärung nach jeder Antwort

+Weiterlernen

Der schnellste Lernweg

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.