git: Updates wurden abgelehnt, weil die Fernbedienung Arbeit enthält, die Sie lokal nicht haben


111

Ich arbeite in einem Team mit einigen Entwicklern, die git auf BitBucket verwenden. Wir arbeiten alle an einem devZweig und drängen mastererst auf eine Veröffentlichung.

Einer der Entwickler hat einen falschen Code begangen, der versehentlich meinen eigenen überschrieben hat, und jetzt versuche ich, den richtigen Code zurück in das Repo zu schieben. Ich lese diesen Fehler seit einigen Tagen. Ich kann nicht mehr zum Repo wechseln, da der folgende Fehler angezeigt wird:

 ! [rejected]        master -> dev (fetch first)
error: failed to push some refs to 'https://myusername@bitbucket.org/repo_user/repo_name.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Ich folge den Anweisungen und pullerhalte dann einen Zusammenführungskonflikt. Nach der Eingabe einer Nachricht für den Zusammenführungskonflikt ist mein lokaler Code nun der falsche Code, den der andere Entwickler versehentlich hochgeladen hat (wie von der erwartet)pull ). Daher ersetze ich den falschen Code durch das Backup, das ich vor dem Festschreiben kopiert habe, und wenn ich erneut versuche, einen Push durchzuführen, wird der gleiche Fehler angezeigt.

Es ist wirklich frustrierend, ich möchte meinem Team wirklich helfen und einen Beitrag leisten, aber ich kann wegen dieses Fehlers nicht. Weiß jemand, wie man dieses Problem löst? Ich würde mich über jede Hilfe sehr freuen.

Dies sind die Befehle, die ich ausführe, um sie festzuschreiben, wenn sie jemandem helfen:

git pull remotename master:dev
git add --all
git commit -m "some message"
git pull remotename master:dev
git push remotename master:dev

Ich hätte gedacht, wenn ich diese Reihenfolge einhalten würde, würde ich keine Zusammenführungskonflikte erhalten. Ich schätze ich lag falsch. Danke noch einmal

Update: Ich sollte hinzufügen, dass ich einige Stunden bei Google und Stackoverflow gesucht und verschiedene Anweisungen befolgt habe, aber ich kann immer noch nicht pushzum devZweig.

Antworten:


40

git pull <remote> master:devholt den remote/masterZweig und führt ihn in Ihren local/devZweig ein.

git pull <remote> devruft den remote/devZweig ab und führt ihn in Ihren aktuellen Zweig ein.

Ich denke, Sie haben gesagt, dass das widersprüchliche Commit aktiviert ist. Dies ist remote/devalso der Zweig, den Sie wahrscheinlich abrufen und zusammenführen wollten.

In diesem Fall haben Sie den Konflikt nicht in Ihrem lokalen Zweig zusammengeführt, was etwas seltsam ist, da Sie sagten, Sie hätten den falschen Code in Ihrer Arbeitskopie gesehen. Vielleicht möchten Sie überprüfen, was in los ist remote/master.


1
Wow ... das habe ich nie gewusst. Aber jetzt macht es sehr viel Sinn. Der Hauptzweig war ebenfalls falsch, sodass Ihre Antwort meine gesamte Frage klärt. Ich bin noch ein bisschen neu im Git. Vielen Dank, dass Sie mir den Unterschied zwischen diesen beiden erzählt haben!
Delos

6
Die beste Option für mich war git pull --rebase.
derekmx271

149

Verwenden Sie diesen Befehl im Terminal

Git Push -f Ursprungsmaster


47
Die Verwendung von Force Push (-f)
-Flaggen

4
Abgestimmt, da mir in dieser Antwort eine Warnung fehlt.
Melebius

2
Oh! Dies zwingt das Repository, sich selbst neu zu schreiben.
Azarsa

3
Ich hatte den gleichen Fehler mit Github und habe ihn mit diesem Befehl behoben: @theeastcoastwest Warum sagst du, dass dies gefährlich ist? Was ist dein Grund
?

2
@simon das ist gefährlich, weil es die Arbeit in der Ferne ignoriert und deine Änderungen auf das Repo zwingt. Wenn Sie also die Arbeit Ihres Teams nicht durcheinander bringen möchten, erzwingen Sie KEINEN Druck.
Gásten

42

Es passiert, wenn wir versuchen, in das Remote-Repository zu pushen, aber eine neue Datei auf dem Remote-Repository erstellt haben, die beispielsweise noch nicht abgerufen wurde Readme. In diesem Fall, wie der Fehler sagt

git lehnt das Update ab

da wir in unserer lokalen Umgebung keine aktualisierte Fernbedienung genommen haben. Also zuerst von der Fernbedienung ziehen

git pull

Es aktualisiert Ihr lokales Repository und fügt eine neue ReadmeDatei hinzu. Dann Push aktualisierte Änderungen auf Remote

git push origin master

Ich habe git pull origin developin meiner lokalen Entwicklungsabteilung gearbeitet, aber jetzt, wo git pulles für mich gut funktioniert, weiß ich nicht warum.
Alex

weil standardmäßig, wenn Ihr lokaler Zweig mit dem entfernten Zweig synchronisiert ist und Sie in diesem Zweig ausgecheckt sind, Sie keinen Zweig angeben müssen, git pullreicht gerade aus
Himanshu

11

Dies geschieht normalerweise, wenn das Repo einige Elemente enthält, die lokal nicht vorhanden sind. Um unsere Änderungen zu pushen, müssen wir in diesem Fall die Remote-Änderungen integrieren und dann pushen.

Erstellen Sie also einen Pull von der Fernbedienung

git pull origin master

Drücken Sie dann die Änderungen auf diese Fernbedienung

git push origin master

10

Zum Schieben zwingen

Git Push -f Ursprungsmaster


2
Dies sollte wahrscheinlich mit einer Warnung einhergehen.
Chris

7

Ich habe es behoben, ich bin mir nicht ganz sicher, was ich getan habe. Ich habe versucht, einfach zu drücken und zu ziehen, indem ich:

git pull <remote> dev anstatt git pull <remote> master:dev

Hoffe, das hilft jemandem, wenn er das gleiche Problem hat.


6

Sie müssen Folgendes eingeben:

$ git pull
$ git fetch 
$ git merge

Wenn Sie a verwenden git push origin master --force, haben Sie ein großes Problem.


5
Warum müssen Sie nach dem Ausführen, das sie enthält, erneut git fetchund git mergemanuell verwenden ? git pull
Melebius

6

Sie können dies versuchen: git pull origin master --rebase


2
Hallo Eduardo! Das hat bei mir funktioniert. Aber können Sie erklären, warum es funktioniert? Was macht dieser Befehl genau?
Akshaya Natarajan

4

Tatsächlich ist Github viel einfacher als wir denken und es passiert absolut immer dann, wenn wir versuchen zu pushen, selbst nachdem wir einige Dateien explizit in unser Git-Repository eingefügt haben. Um das Problem zu beheben, versuchen Sie es einfach.

: Git ziehen

und dann..

: Git Push

Hinweis: Wenn Sie nach dem Abrufen Ihres Repositorys versehentlich im VIM-Editor stecken geblieben sind, machen Sie sich keine Sorgen, schließen Sie einfach den VIM-Editor und versuchen Sie es mit Push :)


4

Ich habe unten Schritte gemacht. Endlich funktioniert es gut.

Schritte

1) git init

2) Git-Status (zur Überprüfung des Status)

3) git hinzufügen. (Fügen Sie die gesamte Änderungsdatei (.) hinzu.)

4) git commit -m "<pass your comment>"

5) git remote add origin "<pass your project clone url>"

6) Git Pull - Allow-Un-Related-Histories- "<pass your project clone url>"Master

7) Git Push -u "<pass your project clone url>"Master


2

Ich hatte diesen Fehler und das lag daran, dass auf dem Server ein Update vorhanden war, SourceTree jedoch keine verfügbaren Updates anzeigte (möglicherweise, weil ich bei der letzten Überprüfung offline war). Also habe ich eine Aktualisierung im Quellbaum durchgeführt und jetzt werden 2 zu pushende Elemente anstelle von 1 Element angezeigt.

Drücken Sie also auf Aktualisieren oder ziehen, wenn dieser Fehler auftritt, und versuchen Sie es erneut.


1

Git Pull - Rebase Origin Master

Git Push Origin Master


Git Push -f Ursprungsmaster

Warnung git push -f Ursprungsmaster

  • Drängt zwangsweise auf vorhandenes Repository und löscht auch frühere Repositorys. Wenn Sie also keine früheren Versionen benötigen, kann dies hilfreich sein

1

Die beste Option für mich und es funktioniert und einfach

git pull --rebase

dann

git push

viel Glück


1

So habe ich dieses Problem gelöst:

  1. git pull origin master
  2. git push origin master

Dies geschieht normalerweise, wenn Ihr Remote-Zweig nicht aktualisiert wird. Und danach, wenn Sie eine Fehlermeldung wie "Bitte geben Sie eine Commit-Nachricht ein" erhalten, beziehen Sie sich darauf (Für mich hat die Antwort von xiaohu Wang funktioniert :))


0

Ich hatte zuerst ein SSDT VS-Projekt. Ich wollte das Projekt so wie ich es hatte zu Github bringen. Ich wollte, dass dieser Push die erste Version meines Repos ist, mit dem der Master-Zweig gestartet wird. Donals Vorschlag von git push -f origin master war der einfachste Weg (den ich gesehen habe), um dies zu erreichen. Da ich mir keine Sorgen machen musste, etwas neu zu schreiben, schien es sinnvoll zu sein.


0

Ich hatte das gleiche Problem. Es ist passiert, dass ich eine .Readme-Datei im Repository erstellt habe, ohne sie vorher abzurufen.

Möglicherweise möchten Sie die .Readme-Datei löschen oder vor dem Drücken abrufen.


Ich bin mir nicht sicher, ob diese Antwort auf eine 5 Jahre alte Frage einen zusätzlichen Wert bietet. Außerdem bietet sie keine Lösung für das spezifische Problem des OP. Da Sie ein neuer Mitwirkender sind, lesen
Sotiris Koukios-Panopoulos


0

Sie können verwenden

git pull --rebase <your_reponame> <your_branch>

Dies hilft Ihnen, falls Sie einige Änderungen haben, die noch nicht in Ihrem lokalen Repo registriert sind. insbesondereREADME.md

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.