Ich lerne Git und folge dem Git-Community-Buch.
Zuvor (vor langer Zeit) habe ich auf Github ein öffentliches Repository mit einigen Dateien erstellt. Jetzt habe ich ein lokales Git-Repository auf meinem aktuellen Computer eingerichtet und einige Dateien festgeschrieben. Dann habe ich eine Fernbedienung hinzugefügt, die auf meine Github-Seite zeigt:
[root@osboxes c]# git remote add learnc https://github.com/michaelklachko/Learning-C
Das schien erfolgreich zu sein:
[root@osboxes c]# git remote show learnc
* remote learnc
Fetch URL: https://github.com/michaelklachko/Learning-C
Push URL: https://github.com/michaelklachko/Learning-C
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (local out of date)
Jetzt möchte ich die Dateien von meinem Github-Repo auf meinen Computer herunterladen. Ich war das:
[root@osboxes c]# git fetch learnc
[root@osboxes c]# git merge learnc/master
warning: refname 'learnc/master' is ambiguous.
Already up-to-date.
Ich sehe jedoch keine neuen Dateien in meinem lokalen Verzeichnis. Wie kann ich sie bekommen?
Ich habe auch versucht, dies zu tun:
[root@osboxes c]# git pull learnc master
From https://github.com/michaelklachko/Learning-C
* branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories
Übrigens bin ich lokal in der Hauptniederlassung (es gibt keine anderen Niederlassungen):
[root@osboxes c]# git status
On branch master
nothing to commit, working directory clean
git init
? Im letzteren Fall haben diese Repos keine Beziehung (haben keine gemeinsamen Commits) und Sie können sie nicht zusammenführen (Pull ist Fetch + Merge).Antworten:
Versuchen
--allow-unrelated-histories
Wie max630 kommentiert oder wie hier erklärt Git weigert sich, nicht verwandte Historien zusammenzuführen
quelle
Lösen Sie dann den Konflikt
quelle
Ich bin zwar alle dafür, die Arbeitsprobleme von Leuten freizugeben, aber ich denke nicht, dass "push --force" oder "--allow_unrelated_histories" neuen Benutzern als allgemeine Lösungen beigebracht werden sollten, da sie einem Repository echtes Chaos zufügen können, wenn man sie verwendet ohne zu verstehen, warum die Dinge überhaupt nicht funktionieren.
Wenn Sie in einer solchen Situation mit einem lokalen Repository begonnen haben und auf GitHub eine Fernbedienung erstellen möchten, mit der Sie Ihre Arbeit teilen können, sollten Sie auf etwas achten.
Wenn Sie das neue Online-Repository erstellen, gibt es die Option "Dieses Repository mit einer README-Datei initialisieren". Wenn Sie das Kleingedruckte lesen, heißt es "Überspringen Sie diesen Schritt, wenn Sie ein vorhandenes Repository importieren."
Möglicherweise haben Sie dieses Kontrollkästchen aktiviert. Oder Sie haben ein Add / Commit online durchgeführt, bevor Sie einen ersten Push versucht haben. Was passiert, ist, dass Sie an jedem Ort einen eindeutigen Commit-Verlauf erstellen, der ohne die in Nevermores Antwort erwähnte Sonderzulage nicht abgeglichen werden kann (weil Git nicht möchte, dass Sie so arbeiten). Sie können einige der hier genannten Ratschläge befolgen oder diese Option einfach nicht aktivieren, wenn Sie das nächste Mal einige lokale Dateien mit einer brandneuen Fernbedienung verknüpfen möchten. Halten Sie die Fernbedienung für diesen ersten Druck sauber.
Referenz: Meine erste Erfahrung mit git + hub bestand darin, auf dasselbe Problem zu stoßen und viel zu lernen, um zu verstehen, was passiert war und warum.
quelle
Wenn es an einem Ende keinen wesentlichen Verlauf gibt (auch bekannt als ein einzelnes Readme-Commit am Github-Ende), fällt es mir oft leichter, die Readme manuell in mein lokales Repo zu kopieren und
git push -f
meine Version zum neuen Root-Commit zu machen .Ich finde es etwas weniger kompliziert, erfordert nicht das Erinnern an eine dunkle Flagge und hält die Geschichte ein bisschen sauberer.
quelle
In Ihrem Zweig - sagen Sie Master, ziehen Sie und lassen Sie nicht verwandte Historien zu
Hat für mich gearbeitet.
quelle
Führen Sie den folgenden Befehl aus:
Ein Merge-Vim wird geöffnet. Fügen Sie eine Zusammenführungsnachricht hinzu und:
Und du bist gut zu gehen.
quelle
Bei Verwendung
--allow-unrelated-histories
dieses Befehls wurden zu viele Konflikte generiert. Es gab Konflikte in Dateien, an denen ich nicht einmal gearbeitet habe. Um den Fehler zu" Refusing to merge unrelated histories"
beheben, habe ich den folgenden Rebase-Befehl verwendet:Nach diesem Festschreiben werden die nicht festgeschriebenen Änderungen mit einer Festschreibungsnachricht versehen. Führen Sie abschließend den folgenden Befehl aus:
Danach war meine Arbeitskopie mit der Remote-Kopie auf dem neuesten Stand und ich konnte meine Änderungen wie zuvor übertragen. Kein Fehler mehr in Bezug auf nicht verwandte Historien beim Ziehen.
quelle
git pull --rebase=merge --allow-unrelated-histories
wie--rebase=preserve
veraltet git-scm.com/docs/git-pull#Documentation/…In meinem Fall war das gleiche Problem aufgetreten, insbesondere die erste Pull-Anforderung, die nach dem Remote-Hinzufügen eines Git-Repositorys versucht wurde. Der folgende Fehler wurde festgestellt.
Verwenden Sie den Befehl --allow-non-related-histories. Es funktioniert perfekt.
quelle