2011-01-13 9 views
116

Ich benutze Git, um meine zwei Computer und meine Entwicklung zu verwalten. Ich versuche Änderungen an GitHub zu machen und erhalte den Fehler.Was bedeutet "Git Push Non-Fast-Forward-Updates wurden abgelehnt" bedeutet?

Fehler beim Senden einiger Referenzen an <repo>. Um zu verhindern, dass Sie den Verlauf verlieren, wurden Aktualisierungen ohne Schnellvorlauf abgelehnt. Führen Sie Remote-Änderungen durch, bevor Sie erneut drücken.

Was könnte das verursachen und wie kann ich das beheben?

EDIT:

den Repo-Pulling gibt die folgende:

* Zweig Meister> Master (nicht vorspulen) Schon-up-to-date

Das Drücken verursacht immer noch den oben genannten Fehler.

+0

Siehe auch [Git nicht vorspulen abgelehnt] (http verwenden möchten: // Stackoverflow. com/q/5667476/456814). –

Antwort

108

GitHub hat einen schönen Abschnitt „Dealing with “non-fast-forward” errors

Dieser Fehler kann zunächst ein wenig überwältigend, nicht fürchten.
Einfach gesagt, git kann die Änderung nicht auf der Fernbedienung vornehmen, ohne zu verlieren, so dass es den Push zurückweist.
In der Regel wird dies durch einen anderen Benutzer verursacht, der auf denselben Zweig drängt. Sie können dies beheben, indem Sie den Remote-Zweig abrufen und zusammenführen, oder indem Sie pull verwenden, um beides gleichzeitig auszuführen.

In anderen Fällen ist dieser Fehler ein Ergebnis von destruktiven Änderungen, die lokal mit Hilfe von Befehlen wie git commit --amend oder git rebase vorgenommen wurden.
Während Sie die Fernbedienung überschreiben können, indem Sie --force zum Befehl push hinzufügen, sollten Sie dies nur tun, wenn Sie absolut sicher sind, dass dies das ist, was Sie tun möchten.
Force-Push-Vorgänge können Probleme für andere Benutzer verursachen, die den Remote-Zweig abgerufen haben. Im Zweifelsfall nicht drücken.


Git Änderungen auf der Fernbedienung machen kann nicht wie ein Vorspulen merge, die ein Visual Git Reference wie illustriert:

-alt text

Dies ist nicht genau Ihr Fall, sondern helfen Sehen Sie, was "Fast-Forward" ist (wobei der HEAD eines Zweiges einfach zu einem neuen, letzten Commit verschoben wird).


Die „branch master->master (non-fast-forward) Already-up-to-date“ für lokale Niederlassungen in die Regel ist, die ihr Ferngegenstück nicht verfolgen.
Siehe zum Beispiel diese SO Frage "git pull says up-to-date but git push rejects non-fast forward".
Oder die beiden Zweige verbunden sind, aber im Widerspruch mit ihrer jeweiligen Geschichte:
Siehe „Never-ending GIT story - what am I doing wrong here?

Dies bedeutet, dass Ihre Subversion Zweig und Remote-git master-Zweig nicht einverstanden auf etwas.
Einige Änderungen wurden auf eine, die nicht in der anderen ist, übertragen.
Feuer bis gitk --all, und es sollte Ihnen einen Hinweis geben, was schief gelaufen ist - suchen Sie nach "Gabeln" in der Geschichte.

42

Dies bedeutet, dass andere Commits an das Remote-Repository gesendet wurden, die sich von Ihren Commits unterscheiden. Sie können dies in der Regel lösen mit einem

git pull 

bevor Sie schieben

Letztlich „Vorspulen“ bedeutet, dass die Commits, ohne dass eine Zusammenführung direkt auf der Oberseite des Arbeits Baum angewendet werden kann.

+1

Das hat bei mir funktioniert! Ich habe vergessen, dass ich die readme.md auf der Repository-Site geändert habe! – ryanwinchester

9

Bei einem Fast-Forward-Update ändert sich nur die eine Seite nach dem letzten Commit auf der anderen Seite, so dass keine Zusammenführung erforderlich ist. Dies bedeutet, dass Sie Ihre Änderungen zusammenführen müssen, bevor Sie drücken können.

0

Sie könnte Kraft mit Push-Operation in diesem Fall

git push origin master --force