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?
Antworten:
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
Wo
origin
ist der Name Ihres Remote- Repos?quelle
$ git pull origin master -v
aber es gibt Fehlerfatal: refusing to merge unrelated histories
. Dann habe ich es versucht und es hat funktioniert und meine lokalen Dateien erschienen auf Github Remote Repo.Wie die Nachricht sagt,
Verwenden Sie
git pull
diese 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.
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.
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.
quelle
git pull
auch gedrucktAlready 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 offensichtlichgit branch
. Nach dem Laufengit checkout mybranch
funktionierte alles wie erwartet.Haben Sie Ihren Code vor dem Push aktualisiert?
Verwenden
git pull origin master
Sie, 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 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.quelle
git pull origin master
git'origin' does not appear to be a git repository
git remote --verbose
damit 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 !git pull origin master
zeigt bereits aktuell. aber wenn Sie dann versuchen, origin_branch zu drücken, sagen Sie dieselbe Warnung, die in Frage gestellt wurde. Irgendein Vorschlag !!git push -f <remote> <branch>
zB git push origin <your_local_branch> überprüfe diesen Thread .Dies geschieht normalerweise, wenn Sie
git commit
versuchen,git push
Änderungengit pulling
in dem Zweig vorzunehmen ,x
in dem bereits eine andere Person Ä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
zupull and merge
(vor Ort begangen Änderungen an diesem Zweig . Gibt diesem merge eine Botschaft, und fix Konflikte falls vorhanden )SCHRITT 3 :
git stash pop
Diestash
Ä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 -v
Die zusammengeführten Änderungen.Ersetzen
branch_name
durchmaster
(fürmaster
Zweig).quelle
commit
? Sollten Sie Ihre Änderungen danach nicht festschreibenstash pop
?Erste und einfache Lösung (nicht empfohlen)
git push -f origin master
.Empfohlene Lösung
Wenn dies nicht funktioniert, folgen Sie 🔰
.git
Verzeichnis aus dem Ordner.Führen Sie dann die folgenden Befehle aus:
ODER
Nur verwenden,
git push -f origin master
wenn-u
nicht für Sie arbeiten.Dadurch werden fast alle Fehler behoben, die beim Pushen Ihrer Dateien auftreten.
quelle
Manchmal haben wir das Ziehen vergessen und viele Arbeiten in der lokalen Umgebung ausgeführt.
Wenn jemand ohne ziehen schieben will,
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.
quelle
reset --hard
zu einem älteren Commit gemacht und dann ein paar mehr gemacht. Dann wollte ich nur,push
aber 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.Einige von Ihnen erhalten möglicherweise diesen Fehler, weil Git nicht weiß, welchen Zweig Sie pushen möchten.
Wenn Ihre Fehlermeldung auch enthält
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.
quelle
Dies hat bei mir funktioniert - der Befehl
git pull origin branch_name --rebase
ruft zuerst Änderungen vom Namen der entfernten Verzweigung ab, dann dierebase
aktuelle Verzweigung darüber.quelle
Zusätzlich zu den obigen Antworten hat für mich Folgendes funktioniert: -
Szenario -
Lösung -
quelle
--all
Flagge an einem anderen Zweig zog .Ich hatte das gleiche Problem, was ich getan habe, war, dass ich es zuerst mit Gewalt geschoben habe, indem ich es benutzt habe
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 :)
quelle
git push --set-upstream origin master --force
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:
quelle
Ich habe die oben genannte Fehlermeldung erhalten, als ich versucht habe, meinen aktuellen Zweig zu pushen
foobar
:Es stellte sich heraus, dass ich zwei lokale Zweige hatte, die denselben entfernten Zweig verfolgten:
Es hat bei mir funktioniert, meinen aktuellen Zweig mit folgenden Funktionen zu erweitern:
... und zum Aufräumen mit
git branch -d
quelle
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
quelle
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
force
Ich 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!
quelle
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.
quelle
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
quelle
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"
dann zurück in meiner Filiale
Dies funktionierte gut für einen früheren Git-Flow, jedoch nicht mit Github. Das
git rebase
war 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, ingit push -f
der es wahrscheinlich die einfachste Option wurde. Nicht gut.Mein neuer Ablauf besteht darin, den Zweig direkt
git merge
wie folgt zu aktualisieren :In meiner lokalen Niederlassung
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.
quelle
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 habegit push origin master
statt getipptgit push origin mybranch
.Wenn Sie
git pull
diese Nachricht bereits ausgeführt haben und immer noch erhalten, stellen Sie sicher, dass Sie den richtigen Zweig drücken.quelle
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.
Öffnen Sie dann einen neuen Zweig und nennen Sie ihn testend .
Jetzt ist es Zeit, es voranzutreiben:
quelle
$git branch -M <new_name>
um den lokalen Zweig umzubenennen.Ich habe dieses Problem in meinem GIT-Repository behoben. Keine Notwendigkeit
rebase
oderforce
Verpflichtung in diesem Fall. Führen Sie die folgenden Schritte aus, um dieses Problem zu beheben:hoffe es wird helfen.
quelle
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.
quelle
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:
quelle
Wenn Sie sicher sind, dass niemand Änderungen an Ihrem Git-Repository vorgenommen hat und dass Sie an der neuesten Version arbeiten, ist
git pull
dies als Lösung in Ihrem Herzen nicht sinnvoll ...Dann ist das wahrscheinlich passiert, was du benutzt hast
git commit --amend
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ässtpush
, müssen alle anderen ihren Verlauf manuell korrigierenDies 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 tungit push --force
. Dies ändert den Git-Verlauf in Ihrem öffentlichen Repo . Andernfalls ... können Sie eine Leistung erbringengit pull
, aber ich glaube, dass dies das gleiche Ergebnis hat, das Sie nicht durchlaufengit commit --amend
haben. Es wird ein neues Commit erstellt (dh: Git-Verlauf nach Git-Pull: A-> B-> C-> D. )Weitere Informationen: So ändern Sie Ihr letztes Commit
quelle
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.
quelle
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.
quelle
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.
quelle
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.
quelle
Wenn zufällig
git pull
gedrucktAlready up-to-date
wird, möchten Sie möglicherweise den globalen Git-push.default
Parameter (In~/.gitconfig
) überprüfen . Stellen Sie es ein,simple
wenn es in warmatching
. 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 origin
und bei Bedarf einen Pull durchzuführenquelle
Verwenden
git pull https://github.com/username/repository
Sie dies, weil Github und Remote-Repositorys nicht synchron sind. Wenn Siepull
das Repo und dann wirdPush
alles synchron sein und Fehler verschwinden.`
quelle
git pull
druckt bereitsup-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 init
Dies ist der Fehler , den Sie nichtgit init
in Local erstellen sollten , sondern das Projekt in Ihr lokales Projekt klonen sollten mitgit clone
dann ziehen
quelle