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