Skip to content

Kapitel 12: Häufige Git-Fehler & Fehlerbehebung

12.1 Häufige Fehler für Anfänger

❌ Fehler 1: "fatal: not a git repository"

Ursache: Sie sind nicht in einem Git-Repository.

Lösung:

bash
# Überprüfen, ob .git-Ordner existiert
ls -la  # Mac/Linux
dir /a   # Windows

# Falls nicht, Repository initialisieren
git init

# Oder: In das richtige Verzeichnis wechseln
cd pfad/zu/ihrem/projekt

❌ Fehler 2: "fatal: remote origin already exists"

Ursache: Ein Remote namens origin existiert bereits.

Lösung:

bash
# 1. Existierendes Remote anzeigen
git remote -v

# 2. Entweder URL ändern:
git remote set-url origin https://github.com/neuer/user/projekt.git

# Oder Remote löschen und neu hinzufügen:
git remote remove origin
git remote add origin https://github.com/neuer/user/projekt.git

❌ Fehler 3: "error: failed to push some refs"

Ursache: Das Remote-Repository hat Commits, die lokal nicht vorhanden sind.

Lösung:

bash
# Zuerst pullen (fetch + merge)
git pull origin main

# Falls Konflikte: Lösen (siehe Kapitel 5.4)
# Dann erneut pushen
git push origin main

❌ Fehler 4: "fatal: ambiguous argument 'HEAD'"

Ursache: Es gibt noch keinen Commit (leeres Repository).

Lösung:

bash
# Zuerst einen Initial-Commit erstellen
git add .
git commit -m "Initialer Commit"

# Dann funktionieren Befehle wie git log, git reset, etc.

❌ Fehler 5: "warning: LF will be replaced by CRLF"

Ursache: Windows/Linux-Zeilenende-Unterschiede.

Lösung:

bash
# Windows (Empfohlen):
git config --global core.autocrlf true

# Mac/Linux (Empfohlen):
git config --global core.autocrlf input

12.2 Häufige Fehlermeldungen (Mit Bildern erklärt)

❌ Fehler 1: "CONFLICT (content): Merge conflict in index.html"

Vollständige Fehlermeldung:

Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

Erklärung:

  • Zwei Branches haben dieselbe Zeile in index.html geändert.
  • Git kann nicht automatisch entscheiden, welche Version korrekt ist.

Lösung (Schritt-für-Schritt):

  1. Konfliktdatei öffnen:

    html
    <<<<<<< HEAD
    <h1>Willkommen auf meiner Website</h1>
    =======
    <h1>Willkommen zu meinem Blog</h1>
    >>>>>>> feature-branch
  2. Datei bearbeiten (Konfliktmarkierungen entfernen):

    html
    <h1>Willkommen zu meinem Blog</h1>
    <p>Eine Website für meine Artikel</p>
  3. Datei zur Staging Area hinzufügen:

    bash
    git add index.html
  4. Merge abschließen:

    bash
    git commit -m "Merge: feature-branch in main (Konflikt gelöst)"

❌ Fehler 2: "fatal: refusing to merge unrelated histories"

Vollständige Fehlermeldung:

fatal: refusing to merge unrelated histories

Ursache:

  • Zwei Repositories haben unterschiedliche Historien (z.B. lokales Repo und GitHub-Repo separat erstellt).

Lösung:

bash
# Erlauben, unrelated histories zu mergen (Vorsicht!)
git merge origin/main --allow-unrelated-histories

# Danach: Konflikte lösen (falls vorhanden)
# Dann committen

❌ Fehler 3: "error: Your local changes to the following files would be overwritten by merge"

Vollständige Fehlermeldung:

error: Your local changes to the following files would be overwritten by merge:
        index.html
Please commit your changes or stash them before you merge.

Ursache:

  • Sie haben ungespeicherte Änderungen im Working Directory.

Lösung (3 Optionen):

Option 1: Änderungen committen

bash
git add index.html
git commit -m "Temp: Änderungen gesichert"
git merge feature-branch

Option 2: Änderungen stashen

bash
git stash
git merge feature-branch
git stash pop  # Änderungen wiederherstellen

Option 3: Änderungen verwerfen

bash
git restore index.html  # Achtung: Änderungen gehen verloren!
git merge feature-branch

❌ Fehler 4: "fatal: bad object ..."

Vollständige Fehlermeldung:

fatal: bad object a1b2c3d

Ursache:

  • Ungültige Commit-Referenz (Hash falsch oder Commit existiert nicht).

Lösung:

bash
# 1. Überprüfen, ob der Commit existiert
git log --oneline

# 2. Falls nicht: Remote aktualisieren
git fetch origin

# 3. Richtigen Hash verwenden
git reset --hard korrekter-hash

12.3 Git-Fehlerbehebungsstrategien

📖 Allgemeine Fehlerbehebungsstrategie

1. Fehlermeldung lesen (vollständig!)

2. Google-Suche mit Fehlermeldung (z.B. "git error: failed to push")

3. git status ausführen (aktuellen Zustand prüfen)

4. git log --oneline anzeigen (Historie prüfen)

5. Falls unsicher: git stash (Änderungen sichern)

6. Falls immer noch unsicher: Backup erstellen (Repository kopieren)

7. Lösung anwenden

8. git status erneut prüfen

🔹 Strategie 1: git status ist Ihr bester Freund

Immer wenn ein Fehler auftritt:

bash
git status

Ausgabe-Beispiele:

  • nothing to commit, working tree clean → Alles OK
  • Changes not staged for commitgit add ausführen
  • You have unmerged paths → Konflikte lösen

🔹 Strategie 2: git reflog (Rettung für fast alle Fehler)

Wann verwenden?

  • Wenn Sie git reset --hard bereuen
  • Wenn Sie einen Branch gelöscht haben
  • Wenn Sie den Überblick über Ihre Git-Bewegungen verloren haben

Verwendung:

bash
# Reflog anzeigen
git reflog

# Ausgabe-Beispiel:
# a1b2c3d HEAD@{0}: reset --hard HEAD~1
# e4f5g6h HEAD@{1}: commit: Feature hinzugefügt

# Alten Zustand wiederherstellen
git reset --hard e4f5g6h

🔹 Strategie 3: git fsck (Repository-Integritätsprüfung)

Wann verwenden?

  • Wenn Git sich "seltsam" verhält
  • Wenn Commits "verschwunden" scheinen

Verwendung:

bash
# Repository auf Fehler prüfen
git fsck --full

# "Dangling commits" finden (verwaiste Commits)
git fsck --lost-found

12.4 Rettung bei Falschbedienung

🆘 Szenario 1: Falschen Branch committet

Fehler: Sie haben auf main committet, aber eigentlich sollten die Änderungen in feature-branch sein.

Lösung:

bash
# 1. Neuen Branch am aktuellen Stand erstellen
git branch feature-branch

# 2. main auf den vorherigen Commit zurücksetzen
git reset --hard HEAD~1  # (Anzahl der Commits anpassen)

# 3. Auf feature-branch wechseln
git checkout feature-branch

# 4. Überprüfen, ob die Commits da sind
git log --oneline

🆘 Szenario 2: Datei versehentlich gelöscht (und committet)

Fehler: Sie haben eine Datei gelöscht und committet.

Lösung (Datei aus einem alten Commit wiederherstellen):

bash
# 1. Commit-Hash finden, in dem die Datei noch existierte
git log --oneline -- pfad/zur/datei

# 2. Datei aus diesem Commit wiederherstellen
git checkout a1b2c3d -- pfad/zur/datei

# 3. Datei committen
git add pfad/zur/datei
git commit -m "Restore: Datei wiederhergestellt"

🆘 Szenario 3: Commit-Nachricht falsch

Fehler: Sie haben einen Commit mit falscher Nachricht erstellt.

Lösung (letzten Commit ändern):

bash
# Letzten Commit ändern (Nur wenn noch nicht gepusht!)
git commit --amend -m "Neue, korrekte Nachricht"

# Falls bereits gepusht: Nicht amend verwenden!
# Stattdessen: Neuen Commit erstellen, der den Fehler korrigiert
git commit -m "Fix: Falsche Nachricht im vorherigen Commit korrigiert"

🆘 Szenario 4: git reset --hard bereut

Fehler: Sie haben git reset --hard ausgeführt und alle Änderungen sind weg.

Lösung (falls die Änderungen committet waren):

bash
# 1. Reflog anzeigen
git reflog

# 2. Alten Commit finden
# Ausgabe-Beispiel:
# a1b2c3d HEAD@{0}: reset --hard HEAD~1
# e4f5g6h HEAD@{1}: commit: Meine Änderungen

# 3. Alten Stand wiederherstellen
git reset --hard e4f5g6h

Falls die Änderungen NICHT committet waren:

  • ❌ Kann nicht wiederhergestellt werden (es sei denn, Sie haben ein Backup).

🆘 Szenario 5: Sensibledaten (Passwörter, Keys) gepusht

Fehler: Sie haben eine Datei mit Passwörtern in ein öffentliches Repository gepusht.

⚠️ WICHTIG: Sofort handeln!

Lösung (Daten aus der Historie entfernen):

Methode 1: BFG Repo-Cleaner (Empfohlen)

bash
# 1. BFG herunterladen: https://rtyley.github.io/bfg-repo-cleaner/

# 2. Daten entfernen
java -jar bfg.jar --delete-files credentials.txt mein-projekt.git

# 3. Repository bereinigen
cd mein-projekt.git
git reflog expire --expire=now --all
git gc --prune=now --aggressive

# 4. Force Push (⚠️ Gefährlich!)
git push --force origin main

# 5. ALLE Teammitglieder müssen ihre lokalen Repositories neu klonen!

Methode 2: git filter-repo (Moderne Alternative)

bash
# 1. Installieren: pip install git-filter-repo

# 2. Datei aus der Historie entfernen
git filter-repo --path credentials.txt --invert-paths

# 3. Force Push
git push --force origin main

Prävention (für die Zukunft):

  • .gitignore für .env, *.pem, etc. verwenden
  • ✅ Niemals sensible Daten committen!

📝 Zusammenfassung

In diesem Kapitel haben Sie gelernt:

  • Häufige Fehler für Anfänger (und deren Lösungen)
  • Häufige Fehlermeldungen (mit detaillierter Erklärung)
  • Fehlerbehebungsstrategien (git status, git reflog, git fsck)
  • Rettung bei Falschbedienung (versehentliches Löschen, falscher Branch, etc.)

Nächstes Kapitel: Wir werden Git-Interviewfragen für Anfänger behandeln (Basiswissen für Jobinterviews).



Copyright © 2024 Git-Tutorial für Anfänger

Frei für alle Anfänger