781 Stimmen

Kann nicht zu GitHub pushen - sagt ständig, dass eine Zusammenführung erforderlich ist

Ich bin auf ein Problem gestoßen, als ich versucht habe, meinen Code auf GitHub zu veröffentlichen.

Pushing to git@github.com:519ebayproject/519ebayproject.git
To git@github.com:519ebayproject/519ebayproject.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:519ebayproject/519ebayproject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Ich habe noch nichts in das Repository eingefügt, warum muss ich also etwas ziehen?

6 Stimmen

Beachten Sie, dass dies auch bei Zweigen passieren kann, die zuvor lokal besucht wurden und für die Commits im Upstream-Repository vorgenommen wurden. Gibt es eine einfache Möglichkeit, einen solchen alten Zweig schnell weiterzuleiten oder Git ihn im lokalen Repository einfach vergessen zu lassen?

52 Stimmen

@ThorbjørnRavnAndersen - Ich habe es geschafft, dieses Szenario mit "git push -f" zu beheben, was Git dazu zu bringen schien, seine imaginären Probleme zu vergessen :)

0 Stimmen

5voto

Ramon Fincken Punkte 147

Ich hatte genau das gleiche Problem und es stellte sich heraus, dass ich auf einem anderen (lokalen) Zweig war, als ich dachte, und dass der korrekte lokale Zweig bei den Commits aus der Ferne im Rückstand war.

Meine Lösung: den richtigen Zweig auschecken, den Commit aus dem anderen lokalen Zweig übernehmen, git pull und git push

5voto

Component 10 Punkte 9867

Ich hatte ein ähnliches Problem, und es stellte sich heraus, dass mein Arbeitsablauf, mit dem ich meine Zweigstelle auf dem neuesten Stand hielt, fehlerhaft war. Ich habe Folgendes getan:

In meinem lokalen 'Master'

git fetch upstream
git merge upstream/master --ff-only

dann zurück in meiner örtlichen Niederlassung

git rebase master

Das hat bei einem früheren Git-Flow gut funktioniert, aber nicht bei Github. Die git rebase war hier das Problem, das zu Problemen bei der Synchronisierung führte (und ich gebe zu, dass ich das akzeptieren musste, ohne es ganz zu verstehen) und mich leider in eine Lage brachte, in der git push -f wurde wahrscheinlich die einfachste Option. Nicht gut.

Mein neuer Ablauf besteht darin, den Zweig direkt zu aktualisieren, indem ich git merge wie folgt:

In meiner örtlichen Niederlassung

git fetch upstream
git merge upstream/master

Kein schneller Vorlauf, da ich natürlich Änderungen in der örtlichen Niederlassung vorgenommen habe.

Wie Sie wahrscheinlich wissen, bin ich kein Git-Experte, aber ich bin zuverlässig informiert, dass dieser Arbeitsablauf die spezifischen Probleme, die ich hatte, wahrscheinlich vermeiden wird.

4voto

watashiSHUN Punkte 8606

Wenn Sie sicher sind, dass dass niemand Änderungen an Ihrem Git-Repository vorgenommen hat und dass Sie mit der neuesten Version arbeiten, git pull als Lösung in deinem Herzen keinen Sinn macht...

Dann ist wahrscheinlich Folgendes passiert: Sie haben git commit --amend

Damit können Sie Änderungen mit dem vorherigen Commit kombinieren, anstatt sie als völlig neuen Snapshot zu comitten. Sie können damit auch einfach die vorherige Commit-Nachricht bearbeiten, ohne den Snapshot zu ändern.

ATLASSIAN tutorial: Geschichte neu schreiben

Es wird jedoch nicht empfohlen, die git commit --amend wenn Sie den Commit bereits auf GitHub veröffentlicht haben Der Grund dafür ist, dass "das Ändern nicht nur den letzten Commit verändert, sondern ihn komplett ersetzt. Für Git sieht es aus wie ein brandneuer Commit", was bedeutet, dass die Historie für andere Entwickler auf GitHub wie A->B->C aussieht, aber für dich wie A->B->D, wenn GitHub dir erlaubt push alle anderen müssen ihren Verlauf manuell korrigieren

Aus diesem Grund erhalten Sie die Fehlermeldung ! [rejected] master -> master (non-fast-forward) Wenn Sie wissen, dass niemand Ihre letzte Änderung zurückgezogen hat, können Sie Folgendes tun git push --force wird dies die Git-Historie in Ihrem öffentlichen Projektarchiv ändern . Andernfalls...können Sie git pull aber ich glaube, dass dies das gleiche Ergebnis haben wird, da Sie nicht durch die git commit --amend Es wird ein neuer Commit erstellt (d.h.: Git History nach Git Pull: A->B->C->D)

für weitere Einzelheiten: Wie Sie Ihre letzte Übertragung ändern

4voto

Sai prateek Punkte 11258

Ich habe dieses Problem in meinem GIT-Repository behoben. Kein Bedarf an rebase o force in diesem Fall begehen. Verwenden Sie die folgenden Schritte, um dieses Problem zu lösen -

local_barnch> git branch --set-upstream to=origin/<local_branch_name> 

local_barnch>git pull origin <local_branch_name>

local_barnch> git branch --set-upstream to=origin/master

local_barnch>git push origin <local_branch_name>

Ich hoffe, es wird helfen.

4voto

wisbucky Punkte 26902

In meinem Fall hatte ich "mybranch" überprüft, und zwar git pull Ich konnte also nicht herausfinden, warum der Push nicht funktionierte. Schließlich wurde mir klar, dass ich den falschen Zweig gepusht hatte. Ich tippte git push origin master anstelle von git push origin mybranch .

Wenn Sie also bereits git pull und immer noch diese Meldung erhalten, stellen Sie sicher, dass Sie den richtigen Zweig pushen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X