Kann nicht auf GitHub pushen - sagt immer wieder, dass eine Zusammenführung erforderlich ist

743

Ich bin neu bei GitHub . Heute bin ich auf ein Problem gestoßen, als ich versucht habe, 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 in das Repository verschoben. Warum muss ich also etwas abrufen?

user1353717
quelle
6
Beachten Sie, dass dies auch für zuvor lokal besuchte Filialen passieren kann, die Commits im Upstream-Repository hatten. Gibt es eine einfache Möglichkeit, einen so alten Zweig schnell vorzuspulen oder Git einfach im lokalen Repository vergessen zu lassen?
Thorbjørn Ravn Andersen
50
@ ThorbjørnRavnAndersen - Ich habe es geschafft, dieses Szenario mit 'git push -f' zu beheben, was dazu führte, dass git seine imaginären Probleme vergaß :)
Echelon
6
Ich habe eine Beschwerde von Git Newcomer darüber gesehen. Der Grund dafür ist, dass sie beim Erstellen eines neuen Projekts auf GitHub das Kontrollkästchen "Mit Readme initialisieren" verlassen oder die Optionen ".gitignore / GPL" auswählen, sodass für neue Projekte bereits ein Commit vorhanden ist, das sie lokal nicht haben, was zu der Verwirrung führt, die durch den obigen Fehler verursacht wurde.
Ruslan Kabalin
4
@Echelon Die Option -f, um den Push zu erzwingen, ist gefährlich. Ich habe es gerade in einem Teamprojekt verwendet und 6 Commits wurden "gestreift", einfach vom Server gelöscht und es gibt keine Möglichkeit, sie zurückzubekommen!
Deleplace
42
Es ist trendy, Git zu loben. Aber fast jeder Entwickler, mit dem ich gesprochen habe, stimmt privat zu, dass er Git persönlich hasst. Jetzt, wo sie Git verwenden, verbringen sie so viel mehr Zeit mit der Quellcodeverwaltung als früher mit Perforce oder TFS.
Entwickler747

Antworten:

762

Dies kann dazu führen, dass das Remote-Repository Commits verliert. Verwenden Sie es mit Vorsicht.

Wenn Sie den Remote-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>

Wo originist der Name Ihres Remote- Repos?

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

Nick Rolando
quelle
1
Dies funktionierte für mich für ein Repo, das ich auf Github habe, aber ich hatte ein Submodul von Heroku in meiner App. und ich musste die Dateien aus dem Submodul holen und dann die aktualisierte App an Heroku senden.
JGallardo
24
Stellen Sie sicher, dass Sie die letzte Zeile des Kommentars zu diesem Beitrag lesen! "Dies kann dazu führen, dass das Remote-Repository Commits verliert. Gehen Sie vorsichtig damit um." Das Drücken von Gewalt in einer Teamumgebung ist eine gefährliche Sache und sollte normalerweise vermieden werden.
Adam Kalnas
Dies kann auch den gesamten Verlauf vom ursprünglichen Repository zur Remote hinzufügen, indem Cherry-Pick verwendet wird, um "nur" ein Commit zu verschieben. Wiederherstellung von Backup erforderlich ...
Rickfoosusa
Erwähnenswert ist auch, dass bei Verwendung von Github möglicherweise eine offene Pull-Anforderung überschrieben wird, die Sie zuvor mit Ihren letzten Commits erstellt haben. Von Github Docs : "Force Pushing kann Ihre Pull-Anfrage beschädigen".
Armfoot
Das hat bei mir funktioniert. Ich habe es versucht, $ git pull origin master -vaber es gibt Fehler fatal: refusing to merge unrelated histories. Dann habe ich es versucht und es hat funktioniert und meine lokalen Dateien erschienen auf Github Remote Repo.
Vir
238

Wie die Nachricht sagt,

Führen Sie die Remote-Änderungen zusammen (z. B. "Git Pull").

Verwenden Sie git pulldiese Option , 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 zur Erklärung geben. Nehmen wir an, Ihr letzter Abzug vom Ursprung / Zweig erfolgte bei Commit B. Sie haben einige Arbeiten abgeschlossen und festgeschrieben (Commit C). Gleichzeitig hat jemand anderes seine Arbeit abgeschlossen und an origin / branch (Commit D) verschoben. Diese beiden Zweige müssen zusammengeführt werden.

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

Da Sie derjenige sind, der pushen möchte, zwingt Git Sie, die Zusammenführung durchzuführen. Dazu müssen Sie zuerst die Änderungen vom Ursprung / Zweig abrufen.

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

Nach Abschluss der Zusammenführung können Sie nun Origin / Branch schnell auf Commit E vorspulen, indem Sie Ihre Änderungen vornehmen.

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

Jake Greene
quelle
7
Was ist, wenn Sie nicht zusammenführen möchten? Und lassen Sie D einfach als Seitenzweig (zumindest für den Moment). Später könnte ich nach C mehr begehen; jemand anderes könnte nach D mehr begehen. Was ist die Eile, um zusammenzuführen? Wie kann ich einen Seitenzweig verschieben, ohne ihn zusammenzuführen? ~~~
Steve Pitchers
3
local / branch und origin / branch sollen denselben Zweig darstellen, jedoch auf unterschiedlichen Computern (local vs origin); Lokal / Zweig zu pushen bedeutet, Ursprung / Zweig zu aktualisieren. Wenn Sie möchten, dass der Status Ihres Zweigs für andere sichtbar ist (dh nach Ursprung), aber nicht mit Ursprung / Zweig zusammengeführt werden sollen, sollten Sie einen neuen Zweig aus local / branch (git branch [name]) und erstellen Schieben Sie diesen Zweig zum Ursprung (Git Push -u Ursprung [Name])
Jake Greene
1
Tolle Erklärung. Dieses Video zeigt eine kurze Demonstration des Problems und wie es behoben werden kann, wie @JakeGreene beschreibt, sowie zwei Möglichkeiten, es beim Einrichten eines neuen Repositorys zu vermeiden.
Kevin Markham
4
Einige Jahre später scheint es nur, dass diese Antwort dieser anderen
Superjos
1
Für mich git pullauch gedruckt Already up-to-date. Es stellte sich heraus, dass ich nicht auf dem Zweig war, obwohl ich es war, sondern auf einem getrennten HEAD-Zweig (möglicherweise aufgrund einer fehlgeschlagenen Zusammenführung?). Dies war nach dem Laufen offensichtlich git branch. Nach dem Laufen git checkout mybranchfunktionierte alles wie erwartet.
Strider
200

Haben Sie Ihren Code vor dem Push aktualisiert?

Verwenden git pull origin masterSie, bevor Sie etwas drücken.

Ich gehe davon aus, dass Sie originals 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 pushen (nur für den Fall, dass jemand anderes den Code bereits aktualisiert hat github.com). Dies hilft bei der lokalen Lösung von Konflikten.

AYK
quelle
1
Wie kann ich den Repository-Namen kennen? Wenn ich git pull origin mastergit 'origin' does not appear to be a git repository
tippe,
3
'Ursprung' ist eine Fernbedienung. Sie können git remote --verbosedamit alle in Ihrem Git-Ordner konfigurierten Remote-Dateien anzeigen. Zu den auf dem Bildschirm angezeigten Informationen gehören auch entweder "[email protected]" -Pfade oder HTTPS-Pfade, über die Sie ermitteln können, wohin Sie pushen sollen. Hoffe das hilft !
AYK
16
git pull origin masterzeigt bereits aktuell. aber wenn Sie dann versuchen, origin_branch zu drücken, sagen Sie dieselbe Warnung, die in Frage gestellt wurde. Irgendein Vorschlag !!
CoDe
2
@Shubh hast du das Problem jemals gelöst? Ich bekomme das Gleiche!
OriginalAlchemist
3
@OriginalAlchemist ja ... da ich nur Entwickler bin, der an einem remote-lokalen Zweig arbeitet ... also habe ich einen Push-lokalen Zweig erzwungen ... und alle Änderungen des offenen Zweigs auf dem Server mit meinen Änderungen vom lokalen System überschrieben. git push -f <remote> <branch>zB git push origin <your_local_branch> überprüfe diesen Thread .
CoDe
122

Dies geschieht normalerweise, wenn Sie git commitversuchen, git pushÄnderungen git pullingin dem Zweig vorzunehmen , xin dem bereits eine andere Person Änderungen vorgenommen hat.

Der normale Fluss wäre wie folgt:

SCHRITT 1 : git stashIhre lokalen nicht festgeschriebenen Änderungen in diesem Zweig.

SCHRITT 2 : git pull origin branch_name -vzu pull and merge(vor Ort begangen Änderungen an diesem Zweig . Gibt diesem merge eine Botschaft, und fix Konflikte falls vorhanden )

SCHRITT 3 : git stash popDie stashÄnderungen ändern ( Dann können Sie Commits für gepoppte Dateien vornehmen, wenn Sie bereits festgeschriebene Änderungen möchten (STEP4), und später neue Commits für Dateien vornehmen. )

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

Ersetzen branch_namedurch master(für masterZweig).

betenagupd
quelle
3
wo ist das commit? Sollten Sie Ihre Änderungen danach nicht festschreiben stash pop?
Mehmet
Ich sollte. Im Allgemeinen drücke ich zuerst den zusammengeführten Code und schreibe dann meine lokalen nicht festgeschriebenen Änderungen fest. Sie können auch sofort festlegen und pushen. Nur Präferenz.
Prayagupd
51

Erste und einfache Lösung (nicht empfohlen)

  • Versuchen Sie diesen Befehl git push -f origin master.
  • Dieser Befehl überschreibt das Remote-Repository (GitHub).

Empfohlene Lösung

  • Führen Sie die folgenden 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 dies nicht funktioniert, folgen Sie 🔰

  • Delete - .gitVerzeichnis 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
    

ODER

git push -f origin master 

Nur verwenden, git push -f origin masterwenn -unicht für Sie arbeiten.

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

Smit Patel
quelle
4
Das Löschen Ihres Git-Repos und das Verlieren Ihres gesamten Commit-Verlaufs ist eine "empfohlene" Lösung? Scheint voreilig.
Nils Guillermin
@Nils Guillermin Das hängt von deiner Situation ab. Wenn ich an einem großen Projekt arbeite, in dem ich alle Zusammenführungskonflikte beheben muss, würde ich vscode verwenden, um alle Änderungen einfach zu überprüfen und zusammenzuführen. Vielen Dank für Ihre Meinung.
Smit Patel
47

Manchmal haben wir das Ziehen vergessen und viele Arbeiten in der lokalen Umgebung ausgeführt.

Wenn jemand ohne ziehen schieben will,

git push --force

funktioniert. Dies wird nicht empfohlen, wenn Sie mit anderen Menschen arbeiten, aber wenn Ihre Arbeit eine einfache Sache oder ein persönliches Spielzeugprojekt ist, ist dies eine schnelle Lösung.

Teo
quelle
$ Git Push - Force Origin Master
Shaurya Uppal
2
Das hat bei mir funktioniert: persönliches Projekt mit 0 anderen Mitarbeitern. Ich hatte hier auf SO mehrere andere vorgeschlagene "Lösungen" ausprobiert, von denen keine ein sehr einfaches Problem behebt: Ich hatte ein lokales reset --hardzu einem älteren Commit gemacht und dann ein paar mehr gemacht. Dann wollte ich nur, pushaber das Remote-Repo war nicht bereit, mich zu lassen. WarrenP könnte Git-Lernenden tatsächlich helfen, indem es weniger Runen ist. Vielleicht will er nicht.
Mike Nagetier
2
Verwenden Sie es entweder nicht oder lernen Sie, es richtig zu verwenden. Wenn Sie Push in ein wichtiges zentrales Repository erzwingen, das von einem Team gemeinsam genutzt wird, sollten Sie den Push-Zugriff auf alle wichtigen Repos verlieren. Was Sie in Ihrem persönlichen Repo tun, um nicht die alternativen Auswege zu lernen, wirkt sich letztendlich auf Ihre Fähigkeit aus, an gemeinsamen Repos zu arbeiten. Wenn Sie wissen, was vor dem Force Push passiert ist, ist manchmal ein Force Push in Ordnung. Wenn Sie dies nicht tun, ist es nie in Ordnung.
Warren P
35

Einige von Ihnen erhalten möglicherweise diesen Fehler, weil Git nicht weiß, welchen Zweig Sie pushen möchten.

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 möchten Sie vielleicht den praktischen Tipps von Jim Kubicek folgen: Git so konfigurieren, dass nur der aktuelle Zweig gepusht wird, um den Standardzweig auf aktuell zu setzen.

git config --global push.default current
Xiatica
quelle
32
git pull origin branch_name --rebase

Dies hat bei mir funktioniert - der Befehl git pull origin branch_name --rebaseruft zuerst Änderungen vom Namen der entfernten Verzweigung ab, dann die rebaseaktuelle Verzweigung darüber.

Pyuri Sahu
quelle
20

Zusätzlich zu den obigen Antworten hat für mich Folgendes funktioniert: -

Szenario -

  1. Ich habe my_branch erfolgreich zum Ursprung gebracht.
  2. Ich habe noch ein paar Änderungen vorgenommen.
  3. Als ich erneut versuchte zu pushen (nachdem ich hinzugefügt habe, natürlich festschreiben), 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**

Beweis

Bhavuk Mathur
quelle
1
Du hast mir geholfen. Es fiel mir schwer zu bemerken, dass ich zu einem anderen Zweig auschecken und von der Fernbedienung ziehen musste, obwohl ich mit der --allFlagge an einem anderen Zweig zog .
MZanetti
18

Ich hatte das gleiche Problem, was ich getan habe, war, dass ich es zuerst mit Gewalt geschoben habe, indem ich es benutzt habe

git push --force

Ich habe dies getan, nachdem ich die Dateien festgeschrieben hatte und wie Sie einen Fehler erhalten haben. Es hat alle Dateien festgeschrieben und sie gepusht. Dann, als ich das nächste Mal zum Github drängte, tat ich, was es mich verlangte, und dann war es in Ordnung. Hoffe das funktioniert auch bei dir :)

Kailash Bhalaki
quelle
Es wird funktionieren, aber es ist möglicherweise nicht das, was Sie wollen! Es bedeutet, dass Sie im Grunde nur Änderungen ignorieren, die jetzt für immer verloren gehen.
rollt
3
git push --set-upstream origin master --force
Legenden
1
Gute Möglichkeit, ein Repository zu zerstören. Wenn Sie einen Druck erzwingen, zerstören Sie die Geschichte. Auch viele professionell eingerichtete Git-Code-Basen erlauben Ihnen dies nicht.
Oliver Dixon
Dies ist eine doppelte Antwort, und das Original war sowieso kein guter Rat.
Moopet
Dies ist eigentlich das, was ich tun möchte, aber ich habe es gerade mit Gitlab versucht, und Gitlab erlaubt dies nicht für "geschützte Zweige"
jeffery_the_wind
13

Ich erwähnte dies in meinem Tutorial, Wie man GitHub benutzt: Ein Tutorial für Anfänger .

Wenn Sie ein neues Repository auf GitHub erstellen, werden Sie möglicherweise von GitHub aufgefordert, eine Readme-Datei zu erstellen. Wenn Sie eine Readme-Datei direkt auf GitHub erstellen, müssen Sie zuerst eine Pull-Anfrage stellen, bevor die Push-Anfrage erfolgreich ist. Diese Befehle "ziehen" das Remote-Repository, führen es mit Ihren aktuellen Dateien zusammen und "pushen" 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
Thomas07vt
quelle
Ich weiß, dass dies ein Jahr später ist, aber von all diesen Antworten war Ihre die einzige, die tatsächlich erklärte, warum ich bereits am ersten Tag Probleme mit Github hatte. Was ist der Unterschied zwischen Ziehen und Holen?
Xander Luciano
1
Mit Fetch können Sie Änderungen vornehmen, ohne sie in Ihrem lokalen Zweig zusammenzuführen. Pull ist eine Verknüpfung zum Abrufen und anschließenden Zusammenführen. Ich bin sicher, Sie haben das in den letzten 13 Monaten herausgefunden. Ich bin gerade auf der Durchreise, weil ich selbst ein Durcheinander geschaffen habe. ;-)
Wolfhoundjesse
6

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

git checkout foobar
git push origin foo

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

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

Es hat bei mir funktioniert, meinen aktuellen Zweig mit folgenden Funktionen zu erweitern:

git push origin foobar:foo

... und zum Aufräumen mit git branch -d

Marco
quelle
6

git push -f Herkunft branch

Verwenden Sie den obigen Befehl nur, wenn Sie sicher sind, dass Sie keinen Remote-Verzweigungscode benötigen. Andernfalls führen Sie zuerst eine Zusammenführung durch und drücken Sie dann den Code

VIKAS KOHLI
quelle
5
Dies ist ein Duplikat einer schlechten Antwort.
Moopet
5

Wenn Sie nicht in Ihr aktuelles Projekt einsteigen möchten (und möglicherweise Zusammenführungskonflikten ausgesetzt sind, die Sie nicht lösen möchten) und keinen weiteren Zweig erstellen möchten (dies ist mühsam, um einen anderen Zweig zu verwalten), und Sie nicht forceIch möchte keine riskanten und permanenten Git- Befehle ausführen (was mich selbst nach dem Lesen oft überrascht, welche Auswirkungen dies hat).

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 zurück in den Ordner ziehen. Sie sollten in der Lage sein, richtig zu pushen und die gewünschten Ergebnisse zu erzielen. Ich brauche buchstäblich weniger als 10 Sekunden, um dies zu tun.

Zu den Leuten, die mir sagen würden, dass dies nicht richtig ist, ohne irgendwelche Konsequenzen zu nennen, oder zu Leuten, die mir sagen, ich solle einen Befehl verwenden, der mich in Zukunft ärgert, 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 genau den gleichen Effekt hat, werde ich diesen übernehmen. Bis dahin verwende ich diese Methode.

Ein Nachteil dieser Methode ist, dass Ihr Festschreibungsverlauf linear erscheint, wenn Sie tatsächlich in einem Zweig zusammengeführt werden, ohne dass die Zusammenführung dokumentiert wird. Dies ist möglicherweise nicht die beste Methode, wenn Sie mit Gruppen arbeiten. Arbeiten Sie in diesen Fällen an Filialen!

ScottyBlades
quelle
4

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. Überprüfen Sie noch einmal, ob Sie zum richtigen Zweig wechseln.

longda
quelle
1
Und ich hatte eine ähnliche Sache, bei der ich mich an einen früheren Befehl erinnert hatte, der für ein völlig anderes Repository bestimmt war!
Clare Macrae
4

Ich hatte das gleiche Problem und es stellte sich heraus, dass ich mich in einem anderen (lokalen) Zweig befand als ich dachte UND der richtige lokale Zweig in Commits von Remote zurückblieb.

Meine Lösung: Überprüfen Sie den richtigen Zweig, wählen Sie das Commit aus dem anderen lokalen Zweig aus, Git Pull und Git Push

Ramon Fincken
quelle
4

Ich hatte ein ähnliches Problem und es stellte sich heraus, dass mein Workflow zur Aktualisierung meiner Niederlassung fehlerhaft war. Ich habe folgendes gemacht:

In meinem lokalen "Meister"

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

dann zurück in meiner Filiale

git rebase master

Dies funktionierte gut für einen früheren Git-Flow, jedoch nicht mit Github. Das git rebasewar das Problem hier, das Probleme mit der Synchronisierung verursachte (und ich gebe zu, das musste ich akzeptieren, ohne es vollständig zu verstehen) und brachte mich leider in eine Position, in git push -fder es wahrscheinlich die einfachste Option wurde. Nicht gut.

Mein neuer Ablauf besteht darin, den Zweig direkt git mergewie folgt zu aktualisieren :

In meiner lokalen Niederlassung

git fetch upstream
git merge upstream/master

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

Wie Sie wahrscheinlich sehen 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.

Komponente 10
quelle
3

In meinem Fall hatte ich "mybranch" ausgecheckt und getan git pull, so dass ich nicht herausfinden konnte, warum der Push nicht funktionierte. Schließlich wurde mir klar, dass ich den falschen Zweig drückte. Ich habe git push origin masterstatt getippt git push origin mybranch.

Wenn Sie git pulldiese Nachricht bereits ausgeführt haben und immer noch erhalten, stellen Sie sicher, dass Sie den richtigen Zweig drücken.

wisbucky
quelle
3

Entspricht Ihr Filialname dem Namen der Remote-Filiale?

Wenn nein, sollten Sie einen neuen Zweig mit demselben Namen wie der Remote-Zweig auschecken und erneut versuchen, ihn zu pushen.

Angenommen, der Remote-Zweig, den Sie pushen möchten, ist [ Test ] und Ihr lokaler Zweig heißt [ Test ].

Wenn Sie `re nicht in Testzweig ersten Schalter zu.

git checkout test

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

git checkout -b testing

Jetzt ist es Zeit, es voranzutreiben:

git push [remote repo] testing
fox323
quelle
2
Verwenden Sie einfach, $git branch -M <new_name>um den lokalen Zweig umzubenennen.
Kommt
3

Ich habe dieses Problem in meinem GIT-Repository behoben. Keine Notwendigkeit rebaseoder forceVerpflichtung in diesem Fall. Führen Sie die folgenden Schritte aus, um dieses Problem zu beheben:

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.

Sai Prateek
quelle
2

Eine andere Lösung besteht darin, den Kopf der Fernbedienung durch ein weiteres Commit voranzutreiben, wenn Sie können. Nachdem Sie diesen erweiterten Kopf in den lokalen Teilbaum gezogen haben, können Sie ihn erneut verschieben.

9swampy
quelle
2

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

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

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

Dann ist das wahrscheinlich passiert, was du benutzt hast git commit --amend

Sie können bereitgestellte Änderungen mit dem vorherigen Commit kombinieren, anstatt es als völlig neuen Snapshot festzuschreiben. Es kann auch verwendet werden, um einfach die vorherige Festschreibungsnachricht zu bearbeiten, ohne den Snapshot zu ändern.

ATLASSIAN Tutorial: Geschichte neu schreiben

Es wird jedoch nicht empfohlen, eine Ausführung durchzuführen, git commit --amend wenn Sie das Commit bereits auf GitHub übertragen haben. Dies liegt daran, dass "das Ändern nicht nur das letzte Commit ändert, sondern es vollständig ersetzt. 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 dies zulässt push, müssen alle anderen ihren Verlauf manuell korrigieren

Dies ist der Grund, warum Sie die Fehlermeldung erhalten ! [rejected] master -> master (non-fast-forward). Wenn Sie wissen, dass niemand Ihre letzte Änderung vorgenommen hat, können Sie dies tun git push --force. Dies ändert den Git-Verlauf in Ihrem öffentlichen Repo . Andernfalls ... können Sie eine Leistung erbringen git pull, aber ich glaube, dass dies das gleiche Ergebnis hat, das Sie nicht durchlaufen git commit --amendhaben. Es wird ein neues Commit erstellt (dh: Git-Verlauf nach Git-Pull: A-> B-> C-> D. )

Weitere Informationen: So ändern Sie Ihr letztes Commit

watashiSHUN
quelle
2

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

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

Sie können den Remote-Zweig abrufen, um eine lokale Kopie zu erhalten, und die Unterschiede zwischen (i) dem, was der Remote hatte (mit dem alten Filialnamen) und (ii) dem, was Sie haben (mit dem neuen Filialnamen), untersuchen und entscheiden, was zu tun ist . Da Sie sich der Unterschiede der Fernbedienung überhaupt nicht bewusst waren (daher das Problem), ist es viel zu brutal, Änderungen einfach irgendwo zusammenzuführen oder zu erzwingen.

Schauen 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 setzen Sie die Änderungen, die Sie nicht möchten, auf den Zweig zurück, den Sie haben usw.

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

Ivan
quelle
1

Das Problem mit dem Push-Befehl ist, dass Ihr lokales und Remote-Repository nicht übereinstimmt. Wenn Sie beim Erstellen eines neuen Repositorys vom Git-Hub standardmäßig die Readme-Datei initialisieren, wird automatisch der Hauptzweig erstellt. Wenn Sie jedoch versuchen zu pushen, hat dies keinen Zweig. Sie können nicht pushen ... Die beste Vorgehensweise besteht also darin, ein Repo ohne Standard-Readme-Initialisierung zu erstellen.

Suman Astani
quelle
1

Dieses Problem wird normalerweise durch das Erstellen einer readme.md-Datei verursacht, die als Commit 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 vermeiden, und dann versuchen, ein Commit durchzuführen. In meinem Fall hat es funktioniert.

Aman Mishra
quelle
0

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

Mein Server war ~ 12 Stunden hinterher, als ich einen Push machte

Ich habe NTP auf dem Server SYNC meine Uhr konfiguriert.

Ich habe einen neuen Git-Push ausgeführt, der den in diesem Beitrag diskutierten Fehler ausgelöst hat.

X MANN
quelle
0

Wenn zufällig git pullgedruckt Already up-to-datewird, möchten Sie möglicherweise den globalen Git- push.defaultParameter (In ~/.gitconfig) überprüfen . Stellen Sie es ein, simplewenn es in war matching. Die folgende Antwort erklärt, warum:

Git - Was ist der Unterschied zwischen push.default "Matching" und "Simple"?

Es lohnt sich auch zu überprüfen, ob Ihre lokale Niederlassung nicht mehr aktuell ist, git remote show originund bei Bedarf einen Pull durchzuführen

Vikash Raja Samuel Selvin
quelle
0

Verwenden git pull https://github.com/username/repository Sie dies, weil Github und Remote-Repositorys nicht synchron sind. Wenn Sie pulldas Repo und dann wird Pushalles synchron sein und Fehler verschwinden.

`

Mahi
quelle
0

git pull druckt bereits up-to-date

Lösung:

Möglicherweise wurde ein Repository / Projekt in Remote (Server) erstellt und dort eine Datei hinzugefügt. Anschließend wurde erneut ein Ordner in Ihrem lokalen und initialisierten Git erstellt. git initDies ist der Fehler , den Sie nicht git initin Local erstellen sollten , sondern das Projekt in Ihr lokales Projekt klonen sollten mitgit clone

dann ziehen

noob_no1
quelle