Versuch, Dateien aus meinem Github-Repository abzurufen: "Weigert sich, nicht verwandte Historien zusammenzuführen"


151

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

4
Haben Sie beim Einrichten Ihres lokalen Repos Ihr Github-Repo geklont oder haben Sie es einfach getan 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).
Paul

Ich habe git init. Soll ich mein Github-Repo klonen, um dies zu beheben?
MichaelSB

1
Sie können Ihr Github-Repo klonen und damit weiterarbeiten, es ist jedoch weiterhin ein separates Repo. Möchten Sie zwei nicht miteinander verbundene Geschichten zusammenführen?
Paul

Ich denke, ich möchte Historien zusammenführen, aber eigentlich möchte ich nur Dateien sowohl lokal als auch auf Github kombinieren. Ich meine, die Geschichte der alten Dateien, die ich auf Github habe, interessiert mich nicht wirklich.
MichaelSB

Antworten:


315

Versuchen --allow-unrelated-histories

Wie max630 kommentiert oder wie hier erklärt Git weigert sich, nicht verwandte Historien zusammenzuführen



Warum gibt es keine Konfigurationsoption, um dies immer einzustellen? Jedes Mal muss ich diese Option suchen; Ich arbeite seit 2k8 mit Git und bin total verärgert über dieses Babysitting. Dumme Option war nicht immer da. Zumindest sollte die Ablehnungsnachricht die zu verwendende Überschreibung enthalten.
Nyov

98
git checkout master
git merge origin/master --allow-unrelated-histories

Lösen Sie dann den Konflikt

git add -A .
git commit -m "Upload"
git push

1
Vielen Dank, dass Sie die obige Lösung ausgearbeitet haben.
Rahul Raj

39

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.


12

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


11

In Ihrem Zweig - sagen Sie Master, ziehen Sie und lassen Sie nicht verwandte Historien zu

git pull origin master --allow-unrelated-histories

Hat für mich gearbeitet.


1
Mit diesem Befehl müssen Sie einverstanden sein, eine Lizenz oder ReadMe hinzuzufügen, wenn Sie ein Ursprungs-Repo in Github erstellen.
F1Linux

4

Führen Sie den folgenden Befehl aus:

git pull origin master --allow-unrelated-histories

Ein Merge-Vim wird geöffnet. Fügen Sie eine Zusammenführungsnachricht hinzu und:

  1. Drücken Sie ESC
  2. Drücken Sie Umschalt + ';'
  3. Drücken Sie 'w' und dann 'q'.

Und du bist gut zu gehen.


3

Bei Verwendung --allow-unrelated-historiesdieses 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:

git pull --rebase=preserve --allow-unrelated-histories

Nach diesem Festschreiben werden die nicht festgeschriebenen Änderungen mit einer Festschreibungsnachricht versehen. Führen Sie abschließend den folgenden Befehl aus:

git rebase --continue

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.


1
Aktuelle Version: git pull --rebase=merge --allow-unrelated-historieswie --rebase=preserveveraltet git-scm.com/docs/git-pull#Documentation/…
Luckylooke

0

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.

fatal: refusing to merge unrelated histories on every try

Verwenden Sie den Befehl --allow-non-related-histories. Es funktioniert perfekt.

git pull origin branchname --allow-unrelated-histories
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.