Git Push fehlgeschlagen, "Nicht schnelle Vorlauf-Updates wurden abgelehnt"

99

Ich habe meine GIT-Repositories über Git Online bearbeitet. Nachdem ich versucht hatte, meine lokalen Codeänderungen zu verschieben, wurde eine Fehlermeldung angezeigt:

Git push failed, To prevent from losing history, non-fast forward updates were rejected.

Wie kann ich das beheben?

Sarath
quelle

Antworten:

137

Änderungen zuerst ziehen:

git pull origin branch_name
iafonov
quelle
1
Wenn dies Ihr Problem nicht löst, stellen Sie sicher, dass Sie zu demselben Zweig wechseln, an dem Sie gerade arbeiten. Überprüfen Sie mit "git status", auf welchem ​​Zweig Sie sich befinden.
Afilina
1
Dieser Befehl hat mir geholfen, aber ich würde gerne wissen, warum das nicht so ist : git pull? Die Fernbedienung ist gleich origin, läuft also tatsächlich : git pull origin. Sollte es nicht alle Zweige aktualisieren?
Karlen Kishmiryan
83

Fügen Sie --force zu Ihrer Befehlszeile hinzu, wenn Sie sicher sind, dass Sie pushen möchten. ZB verwenden git push origin --force(Ich empfehle die Befehlszeile, da Sie mit der Befehlszeile viel mehr Unterstützung von anderen Benutzern finden. Auch dies ist mit SmartGit möglicherweise nicht möglich.) Weitere Informationen finden Sie auf dieser Website: http://help.github.com/ Fernbedienungen /

Matt
quelle
7
--force löst Ihre Probleme, schadet aber möglicherweise anderen. Es sollte nur mit viel Sorgfalt (und Wissen) verwendet werden
schoetbi
7
-1, weil das Erzwingen von Pushs im Allgemeinen eine schreckliche Idee ist.
Joshin4colours
6
+1, weil 5 Personen mit @ joshin4colours einverstanden waren, -1 zu geben. Aber während Force Pushing nicht immer die beste Idee ist (was Git durch Verweigern Ihres Pushs deutlich macht), würde es die Option nicht geben, wenn es 100% der Zeit eine schlechte Idee wäre. Matts Vorschlag hier kann sicherlich für andere nützlich sein.
user1271772
2
Fühlen Sie sich frei, die zu verwenden, --forcewenn Sie der einzige sind, der diesen Zweig verwendet. Es gibt jedoch Probleme, wenn ein Zweig mit anderen Entwicklern geteilt wird.
Robert Brisita
22

Führen Sie vor dem Drücken einen Git-Pull mit Rebase-Option durch. Dadurch werden die Änderungen, die Sie online vorgenommen haben (in Ihrem Ursprung), lokal angewendet und anschließend mit Ihren lokalen Änderungen versehen.

git pull --rebase

Jetzt können Sie auf Remote drücken

git push 

Weitere Informationen finden Sie unter Erläuterte Git-Rebase und Kapitel 3.6 Git-Verzweigung - Rebasing .

Satishgoda
quelle
2
In meinem Fall git pull --rebaseendet mitThere is no tracking information for the current branch. Please specify which branch you want to rebase against.
Trejder
17

Ich habe den gleichen Fehler festgestellt , fügen Sie einfach "--force" zum Befehl hinzu, es funktioniert

git push origin master --force
Wen Qi
quelle
6
Gibt es Konsequenzen dafür?
Jayunit100
8
Commits anderer verlieren.
Giovanni Toraldo
1
Ich hatte eine seltsame Situation, in der ich genau das tun wollte ... den Inhalt eines gerade erstellten Remote-Master-Zweigs mit etwas Neuem wegblasen. Dies löste mein Problem. Es ist zwar nicht für jeden die Lösung, --forcekann aber hilfreich sein.
Brad
1
Ich denke nicht, dass diese Antwort es verdient, sechsmal abgelehnt zu werden. Dies ist eine gültige Lösung für das bereitgestellte Problem. Der Autor hätte jedoch etwas aussagekräftiger sein können, unter welchen Umständen dieser Befehl nützlich wäre. Wenn es erwähnenswert ist, da es sich gelohnt hat zu schreiben (die Funktionalität für --force)
Aiden Strydom
5

Ich hatte das gleiche Problem.
Der Grund war, dass meine lokale Niederlassung irgendwie die Verfolgung an das entfernte Gegenstück verloren hatte.

Nach dem

git branch branch_name --set-upstream-to=origin/branch_name
git pull

und die Verschmelzungskonflikte zu lösen, konnte ich pushen.

hardmooth
quelle
Es sieht so aus, als hätten Sie die Änderungen in der Remote-Filiale verpasst
Ozma
5

Sie können dem Befehl --force-with-lease hinzufügen , es funktioniert.

git push --force-with-lease

--force ist destruktiv, da es das Remote-Repository bedingungslos mit allem überschreibt, was Sie lokal haben. Aber - Force-with-Lease stellt sicher, dass Sie die Arbeit anderer nicht überschreiben.

Weitere Informationen finden Sie hier .

igorjosesantos
quelle
1

(Eine) Lösung für Netbeans 7.1: Versuchen Sie es mit einem Pull. Dies wird wahrscheinlich auch fehlschlagen. Schauen Sie sich jetzt die Protokolle an (sie werden normalerweise jetzt in der IDE angezeigt). Es gibt eine / mehrere Zeilen, die sagen:

"Pull fehlgeschlagen aufgrund dieser Datei:"

Durchsuchen Sie diese Datei, löschen Sie sie (machen Sie vorher ein Backup). Normalerweise handelt es sich um eine Gitignore-Datei, sodass Sie keinen Code löschen. Wiederholen Sie den Push. Alles sollte jetzt gut funktionieren.

Sliq
quelle
1

Die Verwendung der --rebaseOption hat bei mir funktioniert.

  • git pull <remote> <branch> --rebase

Dann zum Repo drücken.

  • git push <remote> <branch>

Z.B

git pull origin master --rebase

git push origin master

CyberDemic
quelle
0

Ich habe das gleiche Problem. Ich beschloss mit

git checkout <name branch>
git pull origin <name branch>
git push origin <name branch>
Andrea Perdicchia
quelle
3
OP sagt über das Vorantreiben lokaler Codeänderungen. checkoutüberschreibt diese Änderungen oder nimmt sie zumindest nicht in Push auf.
Trejder
0

Das hat bei mir funktioniert. Es finden Sie in der Git-Dokumentation hier

Wenn Sie sich in Ihrer gewünschten Filiale befinden, können Sie dies tun:

git fetch origin
# Fetches updates made to an online repository
git merge origin YOUR_BRANCH_NAME
# Merges updates made online with your local work
CodeChops
quelle
0

Wenn Sie auf dasselbe Problem gestoßen sind, führen Sie die folgenden gitBefehle aus , um es zu lösen .

  • git pull {url} --rebase
  • git push --set-upstream {url} master

Sie müssen zuerst das Repository auf Github erstellt haben.

blackFoxCoder
quelle
0

Manchmal löst sich der KOPF, während Sie an Ihrem Git ziehen. Sie können dies überprüfen, indem Sie den folgenden Befehl eingeben:

git branch 
  • (KOPF von 8790704 gelöst)

    Meister

    sich entwickeln

Es ist besser, in Ihre Filiale zu ziehen und einen neuen Zug von Ihrer jeweiligen Filiale zu nehmen.

git checkout develop

git pull origin develop

git push origin develop
Abhinav
quelle