abgelehnter Master -> Master (nicht schneller Vorlauf)


216

Ich versuche mein Projekt zu pushen (alle Dateien in einem neuen Repository). Ich folge den Schritten, aber wenn ich mit git push -u origin masterdrücke, erhalte ich diesen Fehler:

! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:asantoya/projectnewbies.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

Ich habe diesen Fehler oft erhalten und kann nicht herausfinden, was ich tun soll.


4
Wenn Sie sicher sind, dass Ihr lokaler Master die neuesten Änderungen hat, die Sie auf der Fernbedienung wünschen, dann tun Sie git push --force
IgorGanapolsky

34
git push --force <remote_repository>arbeitete für mich.
Sortierer

@Sorter - Ich hatte den ganzen Tag das gleiche Problem, das hat mir geholfen !! Danke dir. Es gibt jedoch keine Erklärung dafür, warum das Problem überhaupt aufgetreten ist und warum das Update funktioniert hat.
Padawan

1
@pmr, nur flippig zu fragen, ob das OP "Fehlermeldung lesen" überhaupt nicht hilft. Offensichtlich ergab die Fehlermeldung für das OP keinen Sinn, genauso wie sie für mich oder die anderen 66 Personen, die seinen Beitrag positiv bewertet haben, keinen Sinn ergab. Snarky, witziger als das, hilft den Leuten überhaupt nicht.
Padawan

3
@Padawan Sie werden auch feststellen, dass diese "bissige, witzigere Person" die akzeptierte Antwort auf diese Frage lieferte und 72 Personen (wahrscheinlich auch Sie) sie hilfreich fanden. Es tut mir leid, dass mein Kommentar arrogant wirkte, aber es wäre meine erste Frage gewesen, wenn Sie mir diese Frage auch im beruflichen Kontext gestellt hätten. Manchmal ist es ein Wunder, anzuhalten und sich eine Minute Zeit zu nehmen, um die Fehlermeldung sorgfältig zu lesen. Ich habe es für mich getan, als ich diesen Fehler zum ersten Mal sah.
PMR

Antworten:


160

Wie die Fehlermeldung sagt: git pullbevor Sie es versuchen git push. Anscheinend ist Ihre lokale Niederlassung nicht mit Ihrer Tracking-Niederlassung synchron.

Abhängig von den Projektregeln und Ihrem Workflow möchten Sie möglicherweise auch verwenden git pull --rebase.


1
Es zeigt mir, dass das automatische Zusammenführen von README.md fehlgeschlagen ist. Beheben Sie Konflikte und schreiben Sie das Ergebnis fest.
Asantoya17

1
@ Asantoya17 Änderungen, die am Remote-Master vorgenommen wurden, stehen in Konflikt mit Ihren Änderungen. Überprüfen Sie die Datei und überprüfen Sie sie. Übernehmen Sie dann die Ergebnisse der Auflösung. Bitte besorgen Sie sich ein Tutorial oder ein Buch oder lesen Sie zumindest die Nachrichten.
PMR

1
Was bedeutet Ziehen? Ermöglicht es Ihnen, eine Datei zu pushen oder eine Datei von der Repository-Website abzurufen und herunterzuladen? (zB Bit Bucket)
David Dimalanta

4
@ Andrews git push --force origin master. Wenn Sie mehr als einmal in Ihrem Leben auf solche Probleme stoßen, ist Ihr Projektworkflow unterbrochen. Features sollten in Zweigen entwickelt und ohne schnellen Vorlauf zusammengeführt werden. Wenn ein Feature "fehlgeschlagen" ist, sollten Sie das Zusammenführungs-Commit zurücksetzen (führen Sie Ihre Tests vorzugsweise zuerst in einem Integrationszweig durch, bevor Sie ein Feature zum Master zusammenführen). Keine Ahnung von Eclipse.
PMR

1
Was tun, wenn dieser Fehler gemeldet wird git pull origin trunk:master?
Andry

175

HINWEIS: Dies ist niemals eine empfohlene Verwendung von Git. Dadurch werden Änderungen auf der Fernbedienung überschrieben. Tun Sie dies nur, wenn Sie zu 100% wissen, dass Ihre lokalen Änderungen an den Remote-Master übertragen werden sollen.

Versuche dies: git push -f origin master


47
Nein, versuch das nicht. Von git help push: "Dies kann dazu führen, dass das Remote-Repository Commits verliert. Gehen Sie vorsichtig damit um."
jcsahnwaldt Reinstate Monica

7
auf keinen Fall tun
Lluís

14
das hat bei mir funktioniert. Ich dachte, es wäre in Ordnung, weil mein einziges Commit für Github das war, das mit einem neuen Repo erstellt wurde. Wahrscheinlich eine gute Idee, es nach dem Start eines Projekts nicht zu verwenden.
Matthew Moore

1
kann nützlich sein, wenn Sie ein Repo aktualisieren möchten, das für
Lieferzwecke

Ich habe dies nur verwendet, als ich gerade ein Commit durchgeführt habe, das mit GitHub synchronisiert wurde, und mir dann gewünscht, ich hätte diesem Commit eine weitere Datei hinzugefügt. Also habe ich es lokal rückgängig gemacht, den obigen Befehl ausgeführt, um es von GitHub zu löschen, dann erneut lokal festgeschrieben und dann synchronisiert. Alles gut jetzt! Wohlgemerkt, ich wusste, dass für diesen Zweig keine weiteren Verpflichtungen eingegangen wurden.
ZeMinimalist

18

Dieser Befehl hat bei mir gut funktioniert

git push -f origin master

3
Seien Sie vorsichtig, bevor Sie diesen Befehl verwenden. Wenn Sie diesen Befehl verwenden, verlieren Sie alle Ihre früheren Commits.
Twenk11k

bedeutet -f
Kraftzwang

@ Maheshmnj Ja!
Testbenutzer

15

Ich habe gerade diesen Fehler erhalten.

Ich habe nach dem Erstellen meines lokalen Git-Repositorys ein Github-Repository erstellt, daher musste ich die Änderungen in local akzeptieren, bevor ich zu github pushe. In diesem Fall war die einzige Änderung die Readme-Datei, die als optionaler Schritt beim Erstellen des Github-Repositorys erstellt wurde.

git pull https://github.com/*username*/*repository*.git master

Die Repository-URL finden Sie hier auf der Projekt-Github-Seite:

Geben Sie hier die Bildbeschreibung ein

Ich habe dann neu initialisiert (dies wird möglicherweise nicht benötigt)

git init
git add .
git commit -m "update"

Dann drücken Sie:

git push

3
Diese Antwort spiegelt das tatsächliche Fallszenario wider.
kta

9

Ich hatte ein neues Repo in Github erstellt und hatte das gleiche Problem, aber es hatte auch Probleme beim Ziehen, also funktionierte dies für mich.

Dies wird jedoch bei Repos, die bereits viele Codes haben, nicht empfohlen, da dies alles durcheinander bringen könnte

git push origin master --force

Diese Antwort ist bereits gegeben: stackoverflow.com/a/16374574/1771479 und wird nicht empfohlen.
Agold

9

WARNUNG:

Ein ' git pull' zu wählen ist nicht IMMER eine Lösung, seien Sie also vorsichtig. Möglicherweise tritt dieses Problem auf (das im Q erwähnte), wenn Sie Ihren Repository-Verlauf absichtlich geändert haben. In diesem Fall verwechselt git Ihre Verlaufsänderungen mit neuen Änderungen in Ihrem Remote-Repo. Sie sollten sich also für a entscheiden git push --force, da durch das Aufrufen git pullabsichtlich alle Änderungen rückgängig gemacht werden, die Sie an Ihrem Verlauf vorgenommen haben.


8

Wenn git pulldies nicht hilft, haben Sie wahrscheinlich Ihre Änderungen vorgenommen (A) und danach git commit --amendeinige weitere Änderungen hinzugefügt (B). Daher glaubt git, dass Sie den Verlauf verlieren können - es interpretiert B als ein anderes Commit, obwohl es alle Änderungen von A enthält.

             B
            /
        ---X---A

Wenn niemand das Repo danach ändert A, können Sie dies tun git push --force.

Wenn es jedoch Änderungen Avon einer anderen Person gibt:

             B
            /
        ---X---A---C

dann müssen Sie neu festlegen, dass Personen von Azu B( C-> D) wechseln .

             B---D
            /
        ---X---A---C

oder beheben Sie das Problem manuell. Ich habe noch nicht darüber nachgedacht, wie ich das machen soll.


7

Verwenden Sie diesen Befehl:

git pull --allow-unrelated-histories <nick name of repository> <branch name>

mögen:

git pull --allow-unrelated-histories origin master

Dieser Fehler tritt auf, wenn Projekte keinen gemeinsamen Vorfahren haben.


7
git push -f origin master

benutze Brute Force ;-) Höchstwahrscheinlich versuchst du, einen lokalen Ordner hinzuzufügen, den du erstellt hast, bevor du das Repo auf Git erstellt hast.


2
Jede Antwort, einschließlich dieser, sollte eine Warnung geben.
D. Ben Knoble

1
Ich habe es versucht und es hat mich viele Commits auf GitHub gekostet, die ich von einem anderen lokalen Klon des Repos wiederherstellen musste. Gefährlich.
Paflow

6

Dies liegt daran, dass Sie einige Änderungen an Ihrem Master vorgenommen haben, sodass das Projekt Sie auffordert, zuerst zu ziehen. Wenn Sie es trotzdem drücken möchten, können Sie Brute Force anwenden, indem Sie Folgendes eingeben:

git push -f origin master

Denken Sie daran, zuerst Ihre Änderungen zu übernehmen:

git add .
git commit -m "Your commit message"


4

Du musst tun

git branch

wenn die Ausgabe so etwas wie:

* (no branch)
master

dann mach

git checkout master

Stellen Sie sicher, dass Sie keine ausstehenden Commits haben, da beim Auschecken alle nicht festgeschriebenen Änderungen verloren gehen.


4

! [abgelehnt] master -> master (nicht schneller vorlauf)

Keine Panik, das ist extrem einfach zu beheben. Alles, was Sie tun müssen, ist einen Pull auszugeben, und Ihre Filiale wird schnell vorspulen:

$ git ziehen Myrepo Master

Versuchen Sie dann Ihren Push erneut und alles sollte in Ordnung sein:

$ git push github master


4

Dies ist mir passiert, als ich im Entwicklungszweig war und mein Hauptzweig nicht mit dem neuesten Update ausgestattet ist.

Als ich versuchte, einen Push aus dem Entwicklungszweig zu senden, hatte ich diesen Fehler.

Ich habe es behoben, indem ich zu Master Branch gewechselt habe, Git Pull gezogen habe und dann zurückgegangen bin, um Branch und Git Push zu entwickeln.

$ git fetch && git checkout master
$ git pull
$ git fetch && git checkout develop
$ git push

3

Ich hatte dieses Problem auf einer Entwicklungsmaschine. Der devAst drückte gut, aber der masterAst gab mir (während git pushich auf dem devAst war):

! [rejected]        master -> master (non-fast-forward)

Also habe ich versucht:

git checkout master
git pull

Welches gab mir:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me, either.

Ich fand heraus, dass der Hauptzweig fehlte .git/configund fügte hinzu:

[branch "master"]
    remote = origin
    merge = refs/heads/master

Danach hat git pushauch am devAst gut funktioniert .


2

Meine Fernbedienung war nicht mit der lokalen Fernbedienung synchronisiert, daher funktionierte dies für mich

git pull --rebase

und stellen Sie sicher, wenn Sie es git pullerneut tun , sollte es bereits aktuell sein und jetzt sind Sie bereit, zum Ursprung zu drängen

vorausgesetzt du hast schon git remote add origin remote repository URL

machen

`git push origin master`  

Der Screenshot sagt alles Geben Sie hier die Bildbeschreibung ein

Alternativ können Sie dies tun

  1. git stash (speichert nicht festgeschriebene Arbeit vorübergehend)
  2. Git Pull (machen Sie Ihre lokalen und Remote synchronisiert)
  3. git stash pop (hol dir nicht festgeschriebene Änderungen zurück)
  4. Git Push

1

Ich hatte das gleiche Problem. Ich benutze Git Totoise. Klicken Sie einfach mit der rechten Maustaste -> TotoiseGit -> Aufräumen. Jetzt kannst du zu Github pushen. Bei mir hat es gut funktioniert: D.


1

Dies liegt daran, dass Sie widersprüchliche Änderungen am Master vorgenommen haben. Und Ihr Repository-Server kann Ihnen das mit diesen Worten nicht sagen, daher gibt es diesen Fehler, weil es nicht seine Aufgabe ist, diese Konflikte für Sie zu lösen, und er bittet Sie, dies selbst zu tun. Wie ?

1- git pull Dadurch wird Ihr Code aus Ihrem Repository mit dem Code Ihres Site-Masters zusammengeführt. So werden Konflikte gezeigt.

2- Behandeln Sie diese Handbuchkonflikte.

3-

git push origin master

Und schon ist Ihr Problem gelöst.


0

Das einzige, was ich in der Lage war, dieses Problem zu beheben, war das lokale und Git-Repo zu löschen und das gleiche an beiden Enden erneut zu erstellen. Funktioniert vorerst gut.


Ich habe immer ein Backup meines Git-Repos auf Dropbox. Auf diese Weise muss ich das lokale Repo nicht löschen, sondern kopiere einfach relevante Verzeichnisse aus Dropbox und füge sie ein, wenn die Situation eintritt.
IgorGanapolsky

0

Wenn jemand diesen Fehler hat, während er versucht, auf Heroku zu pushen, ersetzen Sie einfach 'origin' durch 'heroku' wie folgt: git push -f heroku master


0

Versuchen Sie dies, in meinem Fall funktioniert es

git rebase --abort


0

Dies kann auch durch einen Namensfehler verursacht werden, der beim Geben des Namens für das Repo verursacht wurde. Wenn eine der oben genannten Antworten nicht funktioniert hat. Dies hat bei mir funktioniert:

Löschen Sie dieses Repo, erstellen Sie ein neues und wiederholen Sie die folgenden Befehle:

cd 'Local Directory Path'
git remote add origin *your_git_name.git*
git push -u origin master

Wenn bereits Add Origin Origin Shows vorhanden sind, verwenden Sie stattdessen Folgendes:

git remote set-url origin *your_git_name.git*
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.