it-swarm.com.de

Push to GitHub nicht möglich - sagt immer, dass die Zusammenführung erforderlich ist

Ich bin neu bei GitHub . Heute traf ich auf ein Problem, als ich versuchte, meinen Code an GitHub zu senden.

Pushing to [email protected]:519ebayproject/519ebayproject.git
To [email protected]:519ebayproject/519ebayproject.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to Push some refs to '[email protected]: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 im Repository gepusht. Warum muss ich etwas ziehen?

657
user1353717

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

Wenn Sie den entfernten Zweig nicht mit Ihrem lokalen Zweig zusammenführen möchten (siehe Unterschiede zu git diff ) und einen Force-Push ausführen möchten, verwenden Sie den Befehl Push mit -f .

git Push -f Origin <branch>

dabei ist Origin der Name Ihres remote repo.

Normalerweise weigert sich der Befehl, einen Remote-Ref zu aktualisieren, der kein Vorfahre des lokalen Ref ist, der zum Überschreiben verwendet wurde. Dieses Flag deaktiviert die Prüfung. Dies kann dazu führen, dass das entfernte Repository Commits verliert. verwenden Sie es mit Vorsicht.

686
Nick Rolando

Wie die Nachricht Ihnen sagt,

Remote-Änderungen zusammenführen (z. B. "git pull")

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

Ich werde ein Beispiel und ein Bild geben, um es zu erklären. Nehmen wir an, Ihr letzter Zug von Origin/Branch war bei Commit B. Sie haben einige Arbeiten abgeschlossen (Commit C). Gleichzeitig hat eine andere Person ihre Arbeit abgeschlossen und sie nach Origin/Branch (Commit D) verschoben. Es muss eine Verschmelzung zwischen diesen beiden Zweigen geben.

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

Da Sie derjenige sind, der Push ausführen möchte, zwingt Git Sie, die Zusammenführung durchzuführen. Dazu müssen Sie die Änderungen zunächst aus Origin/Branch ziehen.

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

Nach Abschluss der Zusammenführung können Sie Origin/Branch nach Commit E vorspulen, indem Sie Ihre Änderungen übernehmen. 

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

220
Jake Greene

Haben Sie Ihren Code vor dem Push aktualisiert?

Verwenden Sie git pull Origin master, bevor Sie etwas drücken.

Ich gehe davon aus, dass Sie Origin als Namen für Ihre Fernbedienung verwenden.

Sie müssen vor dem Push ziehen, um Ihr lokales Repository auf den neuesten Stand zu bringen, bevor Sie etwas drücken (nur für den Fall, dass eine andere Person bereits Code auf github.com aktualisiert hat). Dies hilft, Konflikte lokal zu lösen. 

191
AYK

Dies geschieht normalerweise, wenn Sie git commit und versuchen, git Push zu ändern, bevor git pulling in diesem Zweig x geändert wird, wenn ein anderer Benutzer bereits Änderungen vorgenommen hat.

Der normale Fluss wäre wie folgt,  

SCHRITT 1 : git stash Ihre lokalen, nicht festgeschriebenen Änderungen in diesem Zweig.

SCHRITT 2 : git pull Origin branch_name -v an pull and merge für lokal festgeschriebene Änderungen in diesem Zweig (Diese Zusammenführung mit einer Nachricht versehen und Konflikte beheben, falls vorhanden.)

SCHRITT 3 : git stash pop die stashed-Änderungen (Wenn Sie möchten, können Sie Commits für ausgelagerte Dateien vornehmen oder bereits festgeschriebene Änderungen (STEP4) drücken und später ein Commit für Dateien ausführen.

SCHRITT 4 : git Push Origin branch_name -v die zusammengeführten Änderungen.

Ersetzen Sie branch_name durch master (für master-Zweig).

121
prayagupd

Manchmal vergaßen wir das Ziehen und machten viele Arbeiten in der lokalen Umgebung.

Wenn jemand ohne Ziehen ziehen möchte,

git Push --force

funktioniert. Dies ist nicht empfehlenswert, wenn Sie mit anderen Personen zusammenarbeiten, aber wenn Ihre Arbeit eine einfache Sache oder ein persönliches Spielzeugprojekt ist, ist dies eine schnelle Lösung.

45
Teo

Einige von Ihnen können diese Fehlermeldung erhalten, weil Git nicht weiß, welchen Zweig Sie zu pushen versuchen.

Wenn Ihre Fehlermeldung auch enthält

error: failed to Push some refs to '[email protected]:jkubicek/my_proj.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. If you did not intend to Push that branch, you may want to
hint: specify branches to Push or set the 'Push.default' configuration
hint: variable to 'current' or 'upstream' to Push only the current branch.

dann sollten Sie den praktischen Tipps von Jim Kubicek folgen: Git auf Nur aktuellen Zweig verzweigen konfigurieren, um den Standardzweig auf aktuell zu setzen.

git config --global Push.default current
35
xiatica

Erste und einfache Lösung

  • Versuchen Sie diesen Befehl git Push -f Origin master.
  • Dieser Befehl führt alle erforderlichen Änderungen an Ihrem Repository durch.

Empfohlene Lösung

  • Löschen Sie das .git-Verzeichnis aus dem Ordner.
  • Führen Sie dann die folgenden 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 git Push -f Origin master nur, wenn -u für Sie nicht funktioniert.

Dadurch werden fast alle Fehler behoben, die beim Übertragen Ihrer Dateien auftreten.

25
Smit Patel
git pull Origin branch_name --rebase

Dies funktionierte für mich - der Befehl git pull Origin branch_name --rebase ruft zunächst die Änderungen von entfernter Zweigname ab und dann rebase den aktuellen Zweig oben.

25
Pyuri Sahu

Ich hatte das gleiche Problem. Was ich tat, war, dass ich es zuerst gewaltsam geschoben habe 

git Push --force

Ich tat das, nachdem ich die Dateien festgeschrieben hatte und einen Fehler bekam, als Sie es bekamen. Es hat alle Dateien festgeschrieben und die Dateien gepusht .. __ Wenn ich das nächste Mal zum Github drückte dann war es gut. Hoffe, das funktioniert auch für dich :)

20
Kailash Bhalaki

Neben den obigen Antworten funktionierte für mich Folgendes:

Szenario -

  1. Ich habe my_branch erfolgreich zu Origin verschoben.
  2. Ich habe noch einige Änderungen vorgenommen.
  3. Als ich erneut versucht habe zu pushen (nach dem Hinzufügen, natürlich begehen), bekam ich den oben genannten Fehler.

Lösung -

 1. git checkout **my_branch**
 2. git add, commit your changes.
 3. git pull Origin **my_branch** (not Origin, master, or develop)
 4. git Push Origin **my_branch**

 Proof

18
Bhavuk Mathur

Ich habe dies in meinem Tutorial erwähnt, How To Use GitHub: Ein Tutorial für Anfänger.

Wenn Sie ein neues Repository in GitHub erstellen, werden Sie möglicherweise von GitHub aufgefordert, eine Readme-Datei zu erstellen. Wenn Sie eine Readme-Datei direkt in GitHub erstellen, müssen Sie zuerst eine Pull-Anforderung erstellen, bevor die Push-Anforderung erfolgreich ausgeführt wird .. Diese Befehle werden das entfernte Repository "ziehen" und mit Ihrem aktuellen zusammenführen Dateien und "Push" dann alle Dateien zurück zu GitHub:

git pull https://github.com/thomas07vt/MyFirstRepo.git master

git Push https://github.com/thomas07vt/MyFirstRepo.git master
12
Thomas07vt

Ich habe die oben genannte Fehlermeldung erhalten, als ich versuchte, meinen aktuellen Zweig foobar zu verschieben:

git checkout foobar
git Push Origin foo

Es stellte sich heraus, dass ich zwei lokale Niederlassungen hatte, die denselben entfernten Zweig verfolgten:

foo -> Origin/foo (some old branch)
foobar -> Origin/foo (my current working branch)

Es funktionierte für mich, um meinen aktuellen Zweig zu pushen:

git Push Origin foobar:foo

... und mit git branch -d bereinigen

6
Marco

git Push -f Origin Zweigname

Verwenden Sie den obigen Befehl nur, wenn Sie sicher sind, dass Sie keinen Remote-Zweigcode benötigen

6
VIKAS KOHLI

Wenn Sie nicht in Ihr aktuelles Projekt einsteigen möchten (und möglicherweise Zusammenführungskonflikte haben, die Sie nicht lösen möchten), und Sie keinen weiteren Zweig erstellen möchten (dies wird langwierig sein, um einen anderen Zweig zu verwalten), und Sie dies nicht tun Ich möchte keine risikobehafteten und dauerhaften git force-Befehle ausführen (die selbst nach dem Lesen ihrer Aktionen oftmals überrascht sind, was die Auswirkungen davon bedeuten). 

Lösung : Sie können einfach den Inhalt Ihres Ordners in einen anderen Ordner ziehen, das Projekt in Ihren jetzt leeren Ordner ziehen, den gezogenen Inhalt in den Papierkorb ziehen und dann Ihr korrektes Projekt wieder in den Ordner ziehen. Sie sollten in der Lage sein, richtig zu drücken und die gewünschten Ergebnisse zu erzielen. Ich brauche dafür buchstäblich weniger als 10 Sekunden.

Den Leuten, die mir sagen würden, dass dies nicht ohne Konsequenzen möglich wäre, oder die Leute sagten mir, dass ich einen Befehl verwenden sollte, der mich zukünftig belästigt, sage ich: "Diese Methode dauert buchstäblich weniger als 10 Sekunden." Wenn ich auf einen git-Befehl stoße, dessen Implementierung weniger als 10 Sekunden dauert und den gleichen Effekt hat, werde ich das übernehmen. Bis dahin verwende ich diese Methode. 

Ein Nachteil dieser Methode ist, dass Ihr Commit-Verlauf linear erscheint, wenn Sie in einem Zweig tatsächlich zusammengeführt wurden, ohne dass die Zusammenführung dokumentiert ist. Dies ist möglicherweise nicht die beste Methode, wenn Sie mit Gruppen arbeiten. In diesen Fällen an Zweigen arbeiten!

5
ScottyBlades

Ich hatte ein ähnliches Problem und es stellte sich heraus, dass mein Workflow, meine Filiale auf dem neuesten Stand zu halten, fehlerhaft war. Ich habe folgendes gemacht:

In meinem lokalen "Meister"

git fetch upstream
git merge upstream/master --ff-only

dann zurück in meiner lokalen Niederlassung

git rebase master

Dies funktionierte gut für einen vorherigen Git Fluss, aber nicht mit Github. Der git rebase war das Problem, das hier Probleme beim Synchronisieren verursachte (und ich gebe zu, das war etwas, was ich ohne Verständnis verstehen musste) und brachte mich leider in eine Position, in der git Push -f wahrscheinlich die einfachste Option wurde. Nicht gut.

Mein neuer Ablauf besteht darin, den Zweig mit git merge wie folgt direkt zu aktualisieren:

In meiner lokalen Niederlassung

git fetch upstream
git merge upstream/master

Kein schneller Vorlauf, da ich in der lokalen Niederlassung natürlich Änderungen vorgenommen habe.

Wie Sie wahrscheinlich sagen können, bin ich kein Git-Experte, aber ich bin zuverlässig informiert, dass dieser Workflow wahrscheinlich die spezifischen Probleme vermeiden wird, die ich hatte.

4
Component 10

Hatte gerade das gleiche Problem, aber in meinem Fall hatte ich den falschen Zweig auf der Fernbedienung eingegeben. Es scheint also, dass dies eine weitere Ursache für dieses Problem ist.

4
longda

Stimmt der Name Ihrer Zweigstelle mit dem Namen der Remote-Zweigstelle überein?

Wenn nein, sollten Sie einen neuen Zweig mit demselben Namen wie der entfernte Zweig auschecken und erneut versuchen, ihn zu drücken.

Angenommen, der entfernte Zweig, den Sie drücken möchten, ist [testing], und Ihr lokaler Zweig heißt [test].

Wenn Sie sich nicht im Zweig test befinden, wechseln Sie zuerst zu diesem Zweig.

git checkout test

Öffnen Sie dann einen neuen Zweig und nennen Sie ihn testing.

git checkout -b testing

Jetzt ist es Zeit, es zu schieben:

git Push [remote repo] testing
3
fox323

Ich habe dieses Problem in meinem GIT-Repository behoben. In diesem Fall müssen keine rebase- oder force-Commits ausgeführt werden. Führen Sie die folgenden Schritte aus, um das Problem zu lösen -

local_barnch> git branch --set-upstream to=Origin/<local_branch_name> 

local_barnch>git pull Origin <local_branch_name>

local_barnch> git branch --set-upstream to=Origin/master

local_barnch>git Push Origin <local_branch_name>

hoffe es wird helfen.

3
Sai prateek

Ich hatte das gleiche Problem und es stellte sich heraus, dass ich mich in einem anderen (lokalen) Zweig befand, als ich dachte, ich wäre UND der richtige lokale Zweig in Commits von remote.

Meine Lösung: checken Sie den richtigen Zweig aus, wählen Sie das Commit aus dem anderen Zweig aus, git pull und git Push

3
Ramon Fincken

In meinem Fall hatte ich "mybranch" ausgecheckt und git pull ausgeführt, sodass ich nicht herausfinden konnte, warum der Push nicht funktionierte. Schließlich wurde mir klar, dass ich den falschen Zweig drängte. Ich habe statt git Push Origin mastergit Push Origin mybranch eingegeben.

Wenn Sie git pull bereits erledigt haben und immer noch diese Nachricht erhalten, stellen Sie sicher, dass Sie den richtigen Zweig verwenden.

3
wisbucky

Ich habe einen ähnlichen Fehler erhalten, als ich die letzten Änderungen in ein nacktes Git-Repository übertrug, das ich für gitweb verwende. In meinem Fall habe ich keine Änderungen am nackten Repository vorgenommen. Deshalb habe ich einfach mein nacktes Repository gelöscht und erneut geklont:

git clone --bare <source repo path> <target bare repo path>
2
Hemant

Eine weitere Option: Umbenennen Sie Ihren Zweig lokal in etwas Neues.

Sie können es dann in das Remote-Repository pushen, wenn Sie beispielsweise eine Kopie (Sicherung) aufbewahren und sicherstellen, dass nichts verloren geht. 

Sie können den entfernten Zweig abrufen, um eine lokale Kopie zu erhalten, und die Unterschiede zwischen (i) dem, was die entfernte (mit dem alten Zweignamen) hatte, und (ii) dem, was Sie haben (mit dem neuen Zweignamen) prüfen und entscheiden, was zu tun ist . Da Sie sich der Unterschiede der Fernbedienung (und damit des Problems) überhaupt nicht bewusst waren, ist es einfach zu brutal, Änderungen irgendwo zusammenzuführen oder zu erzwingen.

Sehen Sie sich die Unterschiede an, wählen Sie den Zweig aus, an dem Sie arbeiten möchten, wählen Sie die gewünschten Änderungen aus dem anderen Zweig aus oder stellen Sie die Änderungen wieder her, die Sie nicht für den Zweig benötigen, den Sie gerade haben usw.

Dann sollten Sie in der Lage sein zu entscheiden, ob Sie Ihre saubere Version auf die Fernbedienung erzwingen möchten oder neue Änderungen hinzufügen möchten.

2
user3070485

Eine andere Lösung besteht darin, den Kopf der Fernbedienung durch ein weiteres Festschreiben vorzurücken, wenn Sie können. Nachdem Sie diesen erweiterten Kopf in den lokalen Teilbaum gezogen haben, können Sie erneut von dort aus drücken. 

2
9swampy

Wenn Sie sicher sind, dass niemand Änderungen an Ihrem Git-Repository vorgenommen hat und Sie an der neuesten Version arbeiten, ist git pull Als Lösung in Ihrem Herzen nicht sinnvoll. ..

Dann ist das wahrscheinlich passiert, Sie haben git commit --amend

Sie können gestaffelte Änderungen mit dem vorherigen Commit kombinieren, anstatt es als einen völlig neuen Snapshot zu übergeben. Es kann auch verwendet werden, um die vorherige Commit-Nachricht einfach zu bearbeiten, ohne den Snapshot zu ändern.

ATLASSIAN Tutorial: Geschichte umschreiben

Es wird jedoch nicht empfohlen, git commit --amend auszuführen, wenn Sie den Commit bereits an GitHub gesendet haben Ändern Sie einfach das letzte Commit - es ersetzt es vollständig. Für Git sieht es wie ein brandneues Commit aus. Für andere Entwickler auf Ihrem GitHub bedeutet dies, dass der Verlauf wie A-> B-> C aussieht, für Sie jedoch wie A -> B-> D, wenn GitHub Push zulässt, müssen alle anderen ihren Verlauf manuell korrigieren

Dies ist der Grund, warum Sie die Fehlermeldung ! [rejected] master -> master (non-fast-forward) erhalten. Wenn Sie wissen, dass niemand Ihre letzte Änderung vorgenommen hat, können Sie git Push --force Ausführen. Dies wird ändere den Git-Verlauf in deinem öffentlichen Repo . Andernfalls ... können Sie git pull Ausführen, aber ich glaube, dies hat dasselbe Ergebnis, als Sie git commit --amend Nicht durchlaufen haben. Es wird ein neues Commit erstellt (dh: Git-Verlauf nach Git ziehen: A-> B-> C-> D)

weitere Informationen: So ändern Sie Ihr letztes Commit

2
watashiSHUN

Das Problem mit dem Push-Befehl ist, dass Ihr lokales Repository und Ihr Remote-Repository nicht übereinstimmen. Wenn Sie die Readme-Datei standardmäßig initialisieren, wenn Sie ein neues Repository aus Git Hub erstellen, wird der Master-Zweig automatisch erstellt. Wenn Sie versuchen, Push auszuführen, hat dies jedoch keinen Zweig. Sie können nicht pushen ... Daher empfiehlt es sich, Repo ohne Standard-Readme-Initialisierung zu erstellen.

1
Suman Astani

verwenden Sie git pull https://github.com/username/repository Dies liegt daran, dass die Github- und Remote-Repositorys nicht synchron sind. Wenn Sie pull das Repo und dann Push verwenden, ist alles synchron und der Fehler wird verschwinden.

`

0
Mahi

Wenn git pullAlready up-to-date druckt, möchten Sie vielleicht den globalen git Push.default param (In ~/.gitconfig) überprüfen. Setzen Sie es auf simple, wenn es sich in matching befand. Die Antwort unten erklärt, warum:

Git - Was ist der Unterschied zwischen Push.default "matching" und "simple"

Es lohnt sich auch zu prüfen, ob Ihre örtliche Niederlassung mit git remote show Origin nicht mehr aktuell ist, und ziehen Sie bei Bedarf einen Pull

git pull Druckt bereits up-to-date

Lösung:

möglicherweise haben Sie ein Repository/Projekt in Remote (Server) erstellt und dort eine Datei hinzugefügt. Dann haben Sie erneut einen Ordner in Ihrem lokalen und initialisierten Git git init erstellt - dies ist das Fehler, Sie sollte nicht git init in local erstellen, sondern das Projekt mit git clone in local klonen

dann ziehen

0
noob_no1

Eine weitere Ursache für dieses Problem (anscheinend nicht so häufig) ...

Mein Server war ~ 12 Stunden zurück, als ich einen Push machte

Ich habe NTP auf dem Server SYNC meiner Uhr konfiguriert. 

Ich habe einen neuen Git-Push ausgeführt, der zu dem in diesem Beitrag beschriebenen Fehler geführt hat.

0
XO.

Dieses Problem wird normalerweise dadurch verursacht, dass eine readme.md-Datei erstellt wird, die als Festschreibung gezählt wird, nicht lokal auf dem System synchronisiert ist und hinter dem Kopf fehlt. Daher wird eine Git-Pull-Anforderung angezeigt. Sie können versuchen, die Readme-Datei zu umgehen und anschließend ein Commit auszuführen. In meinem Fall hat es funktioniert.

0
Aman Mishra