Layer 8Ehrlicher Tech-Support
SoftwareSchweregrad: Anfängerfehlerfatal: refusing to merge unrelated histories

Git: refusing to merge unrelated histories

git pull scheitert mit 'refusing to merge unrelated histories'? So führst du zwei getrennt entstandene Repos kontrolliert zusammen.

Aufwand:
ca. 10 Min.

Das Symptom

Du willst ein frisch angelegtes lokales Projekt mit deinem neuen GitHub-Repo verbinden, tippst git pull origin main – und Git blockt ab mit fatal: refusing to merge unrelated histories. Push geht auch nicht, weil der Remote „schon Commits“ hat. Zwei Repos, die eigentlich eins sein sollten, weigern sich beharrlich, sich zu erkennen.

Die „Layer 8“-Wahrheit

Git ist an dieser Stelle vorsichtig, nicht bockig. Es weigert sich, zwei Commit-Historien zu verschmelzen, die keinen gemeinsamen Vorfahren haben – denn das ist normalerweise ein Versehen (etwa das falsche Remote). Der klassische Auslöser ist hausgemacht: lokal git init gemacht und beim Anlegen des GitHub-Repos den Haken „Add a README“ gesetzt. Schon existieren zwei völlig getrennte Anfänge. Der Schalter --allow-unrelated-histories sagt Git nichts weiter als „ja, ich weiß, was ich tue, das gehört zusammen“ – und schon fügt sich, was zusammengehört.

Die echte, verifizierte Lösung

1000 % faktenbasiert. Jeder Befehl ist real, jeder Pfad existiert. Schritt für Schritt:

  1. 1.

    Ursache verstehen

    Der Fehler bedeutet: lokale und entfernte Historie haben keinen gemeinsamen Startpunkt. Meist entstand das, weil das lokale Repo mit 'git init' begann und das GitHub-Repo separat mit README/Lizenz angelegt wurde.

  2. 2.

    Beide Historien bewusst zusammenführen

    Wenn beide Seiten wirklich zum selben Projekt gehören, den Merge explizit erlauben:

    git pull origin main --allow-unrelated-histories
    
  3. 3.

    Merge-Konflikte auflösen und committen

    Treffen dabei unterschiedliche Versionen derselben Datei aufeinander, markiert Git Konflikte. Nach dem Bearbeiten die Dateien vormerken und den Merge abschließen:

    git add .
    git commit
    
  4. 4.

    Alternative: sauber neu aufsetzen

    Ist das lokale Repo noch klein, ist es oft einfacher, das Remote-Repo frisch zu klonen und die vorhandenen Dateien hineinzukopieren – so entsteht gar kein Historienkonflikt.

    git clone https://github.com/nutzer/repo.git
    
  5. 5.

    Künftig vermeiden

    Beim Anlegen entweder das GitHub-Repo leer lassen (ohne README) und lokal per 'git remote add origin' verbinden, oder gleich das leere Remote-Repo klonen und darin arbeiten. Dann bleibt die Historie durchgehend.

Häufige Fragen (FAQ)

?Warum sagt Git 'refusing to merge unrelated histories'?

Weil die beiden Branches keinen gemeinsamen Ursprungs-Commit haben. Das passiert typischerweise, wenn du lokal 'git init' gemacht und remote ein separates Repo (z. B. mit README) erstellt hast – beide Historien sind unabhängig entstanden.

?Ist die Option --allow-unrelated-histories gefährlich?

Nein, sie ist ein bewusster Sicherheitsschalter. Git verweigert das Zusammenführen nur, um versehentliches Vermischen fremder Projekte zu verhindern. Wenn du weißt, dass beide Seiten zusammengehören, ist die Option der korrekte Weg.

Belege

Diese Seite ist gegen die folgenden Primärquellen geprüft – Hersteller, Standard oder Gesetzestext. Wer es nicht glaubt, muss es nicht: Da steht, wo es nachzulesen ist.

Zuletzt geprüft am . Dokumentation altert – ein Datum daneben ist der einzige ehrliche Umgang damit.

Auch zu finden unter

Verwandte Fehler

SWAnfängerfehlerYour local changes would be overwritten

git: local changes would be overwritten by merge

git stoppt mit 'Your local changes would be overwritten by merge/checkout'? So rettest du deine Änderungen per commit oder stash, statt sie zu verlieren.

SWLästigCONFLICT

Git: Merge-Konflikt (CONFLICT)

Git meldet einen Konflikt beim Zusammenführen? Beide Seiten haben dieselbe Stelle geändert. Git kann nicht raten, welche gilt — das entscheidest du.

SWLästigNot possible to fast-forward, aborting.

git pull: Not possible to fast-forward, aborting

git pull bricht ab, sobald eigener und entfernter Zweig auseinandergelaufen sind. Laut Git 2.55 ist --ff-only die Voreinstellung, nicht der Merge.

SWAnfängerfehlerfatal: not a git repository

git: fatal: not a git repository

git meldet 'fatal: not a git repository (or any of the parent directories)'? Du bist im falschen Ordner oder .git fehlt. So kommst du zurück ins Repo.