2016-07-07 12 views
64

Ich lerne Git, und ich folge dem Git-Community-Buch.Ich versuche, Dateien aus meinem Github-Repository zu ziehen: "Ich weigere mich, nicht verwandte Geschichten zusammenzuführen"

Zuvor (vor langer Zeit) habe ich ein öffentliches Repository auf Github erstellt, mit einigen Dateien. Jetzt habe ich ein lokales Git-Repository auf meinem aktuellen Computer eingerichtet und einige Dateien übertragen. Dann habe ich eine Remote zeigt auf meine Github Seite:

[[email protected] c]# git remote add learnc https://github.com/michaelklachko/Learning-C 

Das schien erfolgreich zu sein:

[[email protected] 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 habe ich die Dateien von meinem GitHub Repo auf den Computer herunterladen möchten. Ich tat dies:

[[email protected] c]# git fetch learnc 
[[email protected] c]# git merge learnc/master 
warning: refname 'learnc/master' is ambiguous. 
Already up-to-date. 

Allerdings sehe ich keine neuen Dateien in meinem lokalen Verzeichnis. Wie kann ich sie bekommen?

Ich habe auch versucht, dies zu tun:

[[email protected] c]# git pull learnc master 
From https://github.com/michaelklachko/Learning-C 
* branch   master  -> FETCH_HEAD 
fatal: refusing to merge unrelated histories 

BTW, lokal bin ich auf dem Master-Zweig (es keine anderen Zweige sind):

[[email protected] c]# git status 
On branch master 
nothing to commit, working directory clean 
+2

Wenn Sie Ihr lokales Repo eingerichtet haben, haben Sie Ihr Github Repo geklont oder einfach nur "git init"? Im letzteren Fall sind diese Repos nicht verwandt (haben keine gemeinsamen Commits) und Sie können sie nicht zusammenführen (Pull ist Fetch + Merge). – Paul

+0

Ich habe git init. Also sollte ich meinen Github Repo klonen, um das zu beheben? – MichaelSB

+0

Sie können Ihr Github-Repo klonen und die Arbeit damit fortsetzen, aber es wird immer noch ein separates Repo sein. Möchten Sie zwei miteinander verbundene Geschichten zusammenführen? – Paul

Antwort

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

Resolve Konflikt, dann

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

Wenn es keine wesentliche Geschichte an einem Ende ist (auch bekannt als wenn es nur eine einzige readme begeht auf dem GitHub Ende ist), finde ich oft einfacher, es manuell in die Readme kopieren mein lokales Repo und mache eine git push -f um meine Version zum neuen root commit zu machen.

Ich finde, es ist etwas weniger kompliziert, erfordert keine Erinnerung an eine obskure Flagge und hält die Geschichte ein wenig sauberer.

15

Während ich alle für das Entsperren der Arbeit Probleme der Menschen bin, denke ich nicht, dass "push --force" oder "--allow_unrelated_histories" neue Benutzer als allgemeine Lösungen gelehrt werden sollen, weil sie wirklichen Schaden an einem Repository verursachen können wenn man sie benutzt, ohne zu verstehen, warum die Dinge überhaupt nicht funktionieren.

Wenn Sie eine Situation wie diese haben, wo Sie mit einem lokalen Repository begonnen haben und eine Remote auf GitHub erstellen möchten, mit der Sie Ihre Arbeit teilen können, ist etwas zu beachten.

Wenn Sie das neue Online-Repository erstellen, gibt es die Option "Dieses Repository mit einer README initialisieren". Wenn Sie das Kleingedruckte lesen, heißt es "Überspringen Sie diesen Schritt, wenn Sie ein vorhandenes Repository importieren."

Sie haben dieses Kästchen möglicherweise markiert. Oder ähnlich haben Sie ein Add/Commit online gemacht, bevor Sie einen ersten Push versuchten. Was passiert, ist, dass Sie an jedem Ort eine eindeutige Commit-Historie erstellen und diese nicht ohne die in Nevermore's Antwort erwähnte Sondergenehmigung abgestimmt werden können (weil Git nicht möchte, dass Sie so arbeiten). Sie können einige der hier genannten Ratschläge befolgen, oder einfach diese Option beim nächsten Mal, wenn Sie einige lokale Dateien mit einer brandneuen Fernbedienung verknüpfen möchten, einfach nicht aktivieren; Halten Sie die Fernbedienung für diesen ersten Stoß sauber.

Hinweis: Meine erste Erfahrung mit git + hub war, auf dasselbe Problem zu stoßen und viel zu lernen, um zu verstehen, was passiert war und warum.

0

Sie sehen diesen Fehler auch, wenn Sie die Remote-URL auf den falschen Namen setzen! Überprüfen Sie, ob Sie die Remote-URL korrekt eingerichtet haben.