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

783voto

Nick Rolando Punkte 25704

Dies kann dazu führen, dass das entfernte Repository Commits verliert; verwenden Sie es mit Vorsicht.

Wenn Sie den entfernten Zweig nicht in Ihren lokalen Zweig einbinden möchten (siehe Unterschiede bei Git-Diff ) und einen Force Push durchführen wollen, verwenden Sie die Push-Befehl mit -f

git push -f origin <branch>

donde origin ist der Name Ihrer remote Repo.

Normalerweise weigert sich der Befehl, eine entfernte Referenz zu aktualisieren, die nicht ein Vorfahre der lokalen Referenz ist, mit der sie überschrieben wurde. Mit diesem Flag wird die Prüfung deaktiviert. Dies kann dazu führen, dass das entfernte Repository Commits verliert; verwenden Sie es mit Vorsicht.

247voto

Jake Greene Punkte 5371

So steht es in der Nachricht,

Zusammenführen der entfernten Änderungen (z.B. 'git pull')

Verwenden Sie git pull um die neuesten Änderungen aus dem entfernten Repository in Ihr lokales Repository zu übernehmen. In diesem Fall erfordert das Ziehen von Änderungen eine Zusammenführung, da Sie Änderungen an Ihrem lokalen Repository vorgenommen haben.

Ich werde dies anhand eines Beispiels und eines Bildes erläutern. Nehmen wir an, Ihr letzter Pull vom Ursprung/Abzweig war bei Commit B. Sie haben einige Arbeiten abgeschlossen und committed (Commit C). Zur gleichen Zeit hat jemand anderes seine Arbeit fertiggestellt und an Ursprung/Zweig übergeben (Commit D). Zwischen diesen beiden Zweigen muss ein Merge stattfinden.

local branch:                         --- Commit C 
                                    /
                                   /
                                  /
origin/branch: Commit A ------ Commit B ---- Commit D

Da Sie derjenige sind, der pushen will, zwingt Git Sie dazu, die Zusammenführung durchzuführen. Dazu müssen Sie zunächst die Änderungen aus origin/branch ziehen.

local branch:                         --- Commit C -- Commit E
                                    /               /           
                                   /               /             
                                  /               /               
origin/branch: Commit A ------ Commit B ---- Commit D 

Nachdem Sie die Zusammenführung abgeschlossen haben, können Sie nun den Ursprung/Zweig zu Commit E vorspulen, indem Sie Ihre Änderungen pushen.

Git verlangt, dass Sie Zusammenführungen selbst durchführen, da eine Zusammenführung zu Konflikten führen kann.

202voto

AYK Punkte 3303

Haben Sie Ihren Code vor der Veröffentlichung aktualisiert?

Verwenden Sie git pull origin master bevor Sie etwas drücken.

Ich gehe davon aus, dass Sie Folgendes verwenden origin als Name für Ihre Fernbedienung.

Sie müssen pullen, bevor Sie pushen, um Ihr lokales Repository auf den neuesten Stand zu bringen, bevor Sie etwas pushen (nur für den Fall, dass jemand anderes bereits Code auf github.com ). Dies hilft bei der Lösung von Konflikten vor Ort.

127voto

prayagupa Punkte 28548

Dies geschieht normalerweise, wenn Sie git commit und versuchen git push Änderungen vor git pulling in diesem Zweig x wo jemand anderes bereits Änderungen vorgenommen hat.

Der normale Ablauf wäre wie folgt,

SCHRITT 1 : git stash Ihre lokalen nicht übertragenen Änderungen in diesem Zweig.

SCHRITT 2 : git pull origin branch_name -v a pull and merge zu lokal vorgenommenen Änderungen an diesem Zweig ( geben Sie dieser Zusammenführung eine Nachricht und beheben Sie etwaige Konflikte. )

SCHRITT 3 : git stash pop les stash änderungen ( Dann können Sie Commits an gepoppten Dateien vornehmen, wenn Sie wollen, oder zuerst die bereits Commit-Änderungen verschieben (STEP4) und später neue Commits an Dateien vornehmen. )

SCHRITT 4 : git push origin branch_name -v die zusammengeführten Änderungen.

_Ersetzen Sie branch_name con master (für master Zweig)._

63voto

Smit Patel Punkte 1578

Erste und einfache Lösung:

  • Versuchen Sie diesen Befehl git push -f origin master .
  • Mit diesem Befehl wird das Remote-Repository (GitHub) zwangsweise überschrieben

Empfohlene Lösung 1 :

  • Führen Sie diese Befehle aus:

    git pull --allow-unrelated-histories //this might give you error but nothing to worry, next cmd will fix it git add * git commit -m "commit message" git push

Wenn das nicht funktioniert, folgen Sie bitte den Anweisungen

Lösung 2 (nicht empfohlen) :

Löscht die gesamte Commit-Historie von Ihnen und Ihren Mitspielern. Bitte tun Sie dies also nicht bei einem professionellen Projekt.

  • Löschen .git Verzeichnis aus dem Ordner.

  • Führen Sie dann diese Befehle aus:

      git init
      git add .
      git commit -m "First Commit"
      git remote add origin [url]
      git push -u origin master

OR

git push -f origin master 

Verwenden Sie nur git push -f origin master wenn -u nicht für Sie arbeiten.

Damit lassen sich fast alle Fehler beheben, die beim Verschieben Ihrer Dateien auftreten.

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