Was bedeutet "Git Push-Updates ohne schnellen Vorlauf wurden abgelehnt"?

153

Ich verwende Git, um meine beiden Computer und meine Entwicklung zu verwalten. Ich versuche, Änderungen an GitHub zu übernehmen, und erhalte den Fehler.

Fehler beim Drücken einiger Refs <repo>. Um zu verhindern, dass Sie den Verlauf verlieren, wurden Aktualisierungen ohne schnellen Vorlauf abgelehnt. Führen Sie Remote-Änderungen zusammen, bevor Sie erneut drücken.

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

BEARBEITEN:

Durch Ziehen des Repos wird Folgendes zurückgegeben:

* Branch Master-> Master (nicht schneller Vorlauf) Bereits aktuell

Das Drücken gibt mir immer noch den oben genannten Fehler.

Moshe
quelle

Antworten:

136

GitHub hat einen schönen Abschnitt namens " Umgang mit" Nicht-Schnellvorlauf "-Fehlern "

Dieser Fehler kann zunächst etwas überwältigend sein, keine Angst.
Einfach ausgedrückt, Git kann die Änderung nicht auf der Fernbedienung vornehmen, ohne Commits zu verlieren, und lehnt daher den Push ab .
Normalerweise wird dies dadurch verursacht, dass ein anderer Benutzer auf denselben Zweig drückt. Sie können dies beheben, indem Sie den Remote-Zweig abrufen und zusammenführen oder Pull verwenden, um beide gleichzeitig auszuführen.

In anderen Fällen ist dieser Fehler das Ergebnis destruktiver Änderungen, die lokal mithilfe von Befehlen wie git commit --amendoder vorgenommen wurden git rebase.
Sie können die Fernbedienung zwar durch Hinzufügen --forcezum pushBefehl überschreiben , dies sollten Sie jedoch nur tun, wenn Sie absolut sicher sind, dass Sie dies tun möchten.
Force-Pushs können Probleme für andere Benutzer verursachen, die den Remote-Zweig abgerufen haben, und gelten als schlechte Vorgehensweise. Wenn Sie Zweifel haben, drücken Sie nicht mit Gewalt .


Git kann auf der Fernbedienung keine Änderungen vornehmen, wie z. B. eine Schnellvorlaufzusammenführung, die in einer Visual Git-Referenz wie folgt dargestellt wird:

Alt-Text

Dies ist nicht genau Ihr Fall, hilft aber zu erkennen, was "schneller Vorlauf" ist (wobei der HEADeines Zweigs einfach in ein neues, neueres Commit verschoben wird).


Das " branch master->master (non-fast-forward) Already-up-to-date" steht normalerweise für lokale Zweigstellen, die ihr entferntes Gegenstück nicht verfolgen.
Siehe zum Beispiel diese SO-Frage " Git Pull sagt aktuell, aber Git Push lehnt nicht schnellen Vorlauf ab ".
Oder die beiden Zweige sind miteinander verbunden, aber nicht mit ihrer jeweiligen Geschichte einverstanden:
Siehe " Unendliche GIT-Geschichte - was mache ich hier falsch? "

Dies bedeutet, dass Ihr Subversion-Zweig und Ihr Remote-Git-Master-Zweig sich nicht auf etwas einigen.
Einige Änderungen wurden an eine weitergegeben, die nicht in der anderen enthalten ist.
Starten Sie gitk --all, und es sollte Ihnen einen Hinweis geben, was schief gelaufen ist - suchen Sie nach "Gabeln" in der Geschichte.

VonC
quelle
53

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

git pull

bevor du drückst

Letztendlich bedeutet "schneller Vorlauf", dass die Commits direkt auf den Arbeitsbaum angewendet werden können, ohne dass eine Zusammenführung erforderlich ist.

Minichat
quelle
2
Das hat bei mir funktioniert! Ich habe vergessen, dass ich die readme.md auf der Repository-Site geändert habe!
Ryanwinchester
14

Bei einem Schnellvorlauf-Update werden die einzigen Änderungen auf der einen Seite nach dem letzten Festschreiben auf der anderen Seite vorgenommen, sodass keine Zusammenführung erforderlich ist. Dies bedeutet, dass Sie Ihre Änderungen zusammenführen müssen, bevor Sie pushen können.

bdukes
quelle
8

In diesem Fall möchten Sie möglicherweise Gewalt mit Push-Betrieb anwenden

Git Push Origin Master - Force

uspinar
quelle
1
Es ist falsch. Die gesamte Quelle von Github wird gelöscht und nur Ihre neue Quelle wird
verschoben. Die
6

Tun Sie niemals etwas git -fzu tun, pushda dies zu späteren katastrophalen Folgen führen kann.

Sie müssen nur eine git pullIhrer lokalen Niederlassungen durchführen.

Ex:

git pull origin 'your_local_branch'

und dann mache a git push

Abhishek Thomas
quelle
0

Sie müssen das zusammenführen und auflösen, conflicts locallybevor Sie Ihre Änderungen an Remote Repo / Fork übertragen.

1) ziehen (holen und zusammenführen)

$ git pull remote branch 

2) Drücken Sie die Änderungen

$ git push remote branch 

Trotzdem haben Sie eine schnelle Wahl, pushum die --forceOption zwangsweise zu verwenden , sollten jedoch vermieden werden, da dies zu einem Verlust von Änderungen führen oder andere Mitwirkende stark beeinträchtigen kann.

Muhammad Soliman
quelle