2014-10-07 4 views

Antwort

18

git status informiert Sie über den Zustand Ihres Arbeitsverzeichnisbaum und Ihre Index (wo Veränderungen statt leben) in Bezug auf die neueste auf dem aktuellen Zweig zu begehen. Die Ausgabe, die Sie sehen, bedeutet, dass die Dateien auf Ihrer Festplatte genau mit dem letzten Commit in Ihrer Zweigstelle übereinstimmen. Das heißt, es gibt "nichts zu begehen".

Die Nachricht von GitHub geht es nicht um zu begehen, sondern um verschmelzen. GitHub möchte Ihnen eine Ein-Klick-Methode anbieten, um diesen Zweig in Ihren Zweig master einzubinden, aber das kann nicht, weil diese Zusammenführung zu Konflikten führt. Da GitHub keine Möglichkeit bietet, Konflikte über die Website zu lösen, werden Sie aufgefordert, sie auf Ihrem eigenen Computer zu lösen.

Die beste Möglichkeit, um mit dieser Situation umzugehen, ist den aktuellen Master-Zweig in Ihren Zweig Zweig lokal zusammenführen und dann das Ergebnis an GitHub. Um das zu tun, gehen Sie wie folgt vor: (. Ich gehe davon aus, dass die GitHub Fern origin genannt wird es in der Regel, und Sie wahrscheinlich wissen, ob es nicht ist.)

$ git checkout pr12 # If you're not already on pr12 
$ git fetch origin 
$ git merge origin/master 

Zuerst machen wir Sicher, wir sind auf dem richtigen Ast. Dann stellen wir sicher, dass wir den neuesten Code aus dem Zweig master auf dem GitHub Repo haben. Dann fügen wir diesen Code in unseren Zweig pr12 ein.

Denken Sie daran: git fetch origin unsere lokalen aktualisiert origin/master die gleiche wie GitHub des master, sondern es berührt nicht die lokale Niederlassung einfach master genannt. Wir müssten unseren Zweig master auschecken, um Änderungen daran vorzunehmen. Stattdessen aktualisieren wir einfach unsere Idee von dem, was auf GitHub ist (origin/master) und verschmelzen das in unsere pr12.

Wenn Sie den Befehl merge ausführen, sehen Sie Konflikte. Diese repräsentieren Entscheidungen, die git (und GitHub) nicht automatisch treffen konnten. Bearbeiten Sie diese Dateien so, dass sie so sind, wie Sie möchten. Dann:

$ git add each/file.txt that/had/conflicts.conf 
$ git commit # Your editor will open with a pre-filled 
       # commit message. Just save and close the file. 
$ git push origin pr12 

Das heißt, fügen wir die Versionen der Dateien, die wir festgelegt, dann beenden Sie die Zusammenführung verpflichten wir mit git merge gestartet. Zuletzt schieben wir den Zweig mit dem neuen Merge Commit auf GitHub.

Da wir die Konflikte gelöst haben, sollte dieser Zweig trivial sein, um den anderen Weg in master zu verschmelzen. GitHub wird das bemerken und Ihnen einen grünen "Merge" Button geben.

+0

Nachdem ich git merge Herkunft/Master so ziemlich jede Datei sagt "beide hinzugefügt" und "neue Datei". – Nathan

+0

Das ist seltsam. Git sagt Ihnen, dass seit dem Zeitpunkt, an dem "Ursprung/Meister" und "Pr12" divergierten, beide Zweige diese Dateien hinzugefügt haben. Sie können feststellen, wo sie visuell auseinandergingen mit 'git log --graph --oneline origin/master pr12'. Sieht die Ausgabe dieses Befehls so aus, wie Sie die Historie dieser beiden Zweige erwarten? – Peeja

+0

Also ich habe es irgendwie bekommen. Aber jetzt erscheint in der Branche alles aus dem ursprünglichen Repo, das mit dem gegabelten Repo zusammengeführt wurde. Und wenn ich versuche, diesen einen Commit rückgängig zu machen, sagt das etwas über den Schalter -m aus. – Nathan

5

Als ich auf diese Nachricht stieß, war es, weil meine Gabel eines bestimmten Repo hinter dem Original war. In meinem speziellen Fall war das Repo, das ich gegabelt habe, pydata/pandas.

Ich musste configure a remote for my fork indem:

> git remote add upstream [email protected]:original_user/original_repo.git 
> git remote -v 
origin [email protected]:some_user/pandas.git (fetch) 
origin [email protected]:some_user/pandas.git (push) 
upstream [email protected]:pydata/pandas.git (fetch) 
upstream [email protected]:pydata/pandas.git (push) 

(Anmerkung:.. git remote add upstream ist eine Möglichkeit, die git sagen „Remote-Add genannt "stromaufwärts" Der Name kann alles sein)

dann habe ich fetched the latest commits aus dem ursprünglichen Repo mit:

> git fetch upstream 
> git checkout master # Just in case you're not already on master 
> git merge upstream/master 

und schließlich drücken Sie die fusionierte r epo zurück zu github:

> git push 
Verwandte Themen