Egit lehnte einen nicht schnellen Vorlauf ab


88

Ich erhalte diese Nachricht, während ich zum Github-Repository drücke. Können Sie mir Schritt für Schritt sagen, wie ich das Problem beheben soll? Ich habe nur einmal gedrückt und es war erfolgreich. Wenn ich jedoch ein Projekt aktualisiert und versucht habe, mein zweites Commit zu pushen, wird "Master abgelehnt, nicht schneller Vorlauf" angezeigt, und ich kann nicht pushen. Bitte erläutern Sie die Vorgehensweise.


Ich habe das gleiche Problem, nachdem ich ein neues Repo mit "Dieses Repository mit einer README-Datei initialisieren" erstellt habe. Ich habe diese entfernt und ohne diese Cheechbox wieder erstellt.
Andrew

@ Andrew ist richtig
Dany Wehbe

Antworten:


223

Ich hatte das gleiche Problem und konnte es beheben. afk5min hatte recht, das Problem ist, dass sich der Zweig, aus dem Sie Code gezogen haben, seitdem im Remote-Repository geändert hat. Gemäß den Standard-Git-Praktiken ( http://git-scm.com/book/en/Git-Basics-Working-with-Remotes ) müssen Sie diese Änderungen (jetzt) ​​im Remote-Repository vor Ihnen in Ihre lokalen Änderungen einbinden kann begehen. Dies ist sinnvoll. Dies zwingt Sie dazu, die Änderungen anderer zu übernehmen und in Ihren Code einzufügen, um sicherzustellen, dass Ihr Code weiterhin mit den anderen vorhandenen Änderungen funktioniert.

Wie auch immer, weiter zu den Stufen.

  1. Konfigurieren Sie den 'Abruf', um den Zweig abzurufen, aus dem Sie ursprünglich gezogen haben.

  2. Holen Sie sich den Remote-Zweig.

  3. Führen Sie diesen Remote-Zweig mit Ihrem lokalen Zweig zusammen.

  4. Übernehmen Sie die (Zusammenführungs-) Änderung in Ihrem lokalen Repo.

  5. Schieben Sie das Wechselgeld auf das Remote-Repo.

Im Detail...

  1. Öffnen Sie in Eclipse die Ansicht 'Git Repositories'.

  2. Stellen Sie sicher, dass Sie Ihr lokales Repository sehen und das Remote-Repository als Unterordner sehen können. In meiner Version heißt es Fernbedienungen, und dann kann ich das Remote-Projekt darin sehen.

  3. Suchen Sie nach dem grünen Pfeil, der nach links zeigt. Dies ist der Abrufpfeil. Klicken Sie mit der rechten Maustaste und wählen Sie "Configure Fetch".

  4. Sie sollten den URI sehen und sicherstellen, dass er auf das Remote-Repository verweist.

  5. Schauen Sie im Abschnitt Ref-Zuordnungen des Popups nach. Meins war leer. Dies gibt an, welche Remote-Referenzen Sie abrufen möchten. Klicken Sie auf "Hinzufügen".

  6. Geben Sie den Zweignamen ein, den Sie aus dem Remote-Repository abrufen möchten. Meins war 'Meister' (übrigens wäre ein Dropdown hier großartig !!, für den Moment musst du es eingeben). Fahren Sie mit dem Popup fort und klicken Sie schließlich auf "Fertig stellen".

  7. Klicken Sie auf "Speichern und abrufen". Dadurch wird diese Remote-Referenz abgerufen.

  8. Suchen Sie im Ordner "Zweige" Ihres lokalen Repositorys. Sie sollten diesen Remote-Zweig jetzt im Remote-Ordner sehen. Wieder sehe ich "Meister".

  9. Klicken Sie mit der rechten Maustaste auf den lokalen Zweig im Ordner "Lokal" von "Zweige", der den Namen "Master" trägt. Wählen Sie "Zusammenführen" und dann den Remote-Zweig mit dem Namen "Ursprung / Master".

  10. Prozess durch die Zusammenführung.

  11. Übernehmen Sie alle Änderungen in Ihr lokales Repository.

  12. Übertragen Sie Ihre Änderungen in das Remote-Repository.

  13. Gönnen Sie sich ein leckeres Getränk und gratulieren Sie sich. Nehmen Sie sich den Rest des Tages frei.


7
Dies sollte als Antwort markiert werden. Lief wie am Schnürchen. Dieses Problem tritt auf, obwohl ich beim Erstellen des Repos auf GitHub für mein Projekt in Eclipse keine Dateien (die übliche README-Datei) hinzugefügt habe. Vielen Dank für die einfach zu befolgende schrittweise Erklärung.
Rbaleksandar

Ich habe ein Jahr gebraucht, um dieses Problem zu lösen, bis ich Ihren Beitrag gelesen habe. In meinem Fall hatte ich keine Fernbedienung, aber Eclipse hat eine Standardeinstellung namens "Ursprung" erstellt.
Eugene van der Merwe

Süß, endlich kann ich mit Eclipse verschmelzen. Der wichtigste Punkt hierbei ist die Verwendung der Ansicht "Git-Repositorys" für die Zusammenführung und nicht der üblichen Ansicht "Team-Synchronisierung". Es wäre gut, wenn in der Team-Synchronisierungsansicht eGit alle Optionen deaktiviert hätte, die nichts bewirken.
Dan Carter

1
Dies funktioniert zwar, führt jedoch zu einem unnötigen Zusammenführungs-Commit. Sie sollten hier rebase verwenden, was in Ordnung ist, da Ihre Änderungen nur lokal sind, sodass Sie keinen veröffentlichten Verlauf ändern (und wenn Sie dies tun würden, würde git Sie ohnehin wegen eines nicht schnellen Vorlaufs anschreien). Ich mag die Antwort von MYN.
Nyuszika7h

Klicken Sie mit der Mergerechten push branch Master
Maustaste

17

In meinem Fall habe ich das Force UpdateKontrollkästchen beim Drücken aktiviert. Es funktionierte wie ein Zauber.


Das hat auch bei mir funktioniert. Ich hatte den Zustand des OP, nachdem ich ein Commit "geändert" hatte. Und holen gab mir "nichts zu holen"
Twilite

11

In der Zwischenzeit (während Sie Ihr Projekt aktualisiert haben) wurden andere Commits für den 'Master'-Zweig vorgenommen. Daher müssen Sie diese Änderungen zuerst abrufen, um Ihre Änderungen übernehmen zu können.


3
In diesem Fall ist Git ziemlich dumm, ich habe alle Änderungen auf die Fernbedienung übertragen. und ich bin die einzige Arbeit an dem Projekt. Warum um alles in der Welt muss ich die Fernbedienung ziehen, bevor ich wieder drücken kann? Das gezogene Wechselgeld würde ursprünglich von meinem Einheimischen kommen
Junchen Liu

7

Anwendbar für Eclipse Luna + Eclipse Git 3.6.1

ICH,

  1. geklontes Git-Repository
  2. einige Änderungen im Quellcode vorgenommen
  3. inszenierte Änderungen von Git Staging View
  4. Endlich festschreiben und pushen!

Und ich habe dieses Problem mit EGit konfrontiert und hier ist, wie ich es behoben habe.

Ja, jemand hat die Änderungen festgeschrieben, bevor ich meine Änderungen festschreibe. Die Änderungen werden also abgelehnt. Nach diesem Fehler werden die Änderungen tatsächlich in das lokale Repository übernommen. Ich wollte nicht nur Pulldie Änderungen, weil ich beibehalten wollte, linear historywie in - In welchen Fällen könnte "Git Pull" schädlich sein?

Also habe ich folgende Schritte ausgeführt

  1. Klicken Sie aus Sicht des Git-Repositorys mit der rechten Maustaste auf das betreffende Git-
    Projekt
  2. select Fetch from Upstream- ruft Remote-Updates (Refs und Objekte) ab, aber lokal werden keine Updates vorgenommen. Weitere Informationen finden Sie unter Was ist der Unterschied zwischen "Git Pull" und "Git Fetch"?
  3. wählen Rebase...- diese öffnen ein Popup, klicken Sie auf Preserve merges during rebasesee warum
    Was genau macht Git „rebase --preserve-Merges“ tun (und warum)
  4. klicke auf Rebase button
  5. Wenn es ein gibt / gibt conflict(s), fahren Sie mit Schritt 6 fort, andernfalls mit Schritt 11
  6. Ein Rebase ResultPopup wird angezeigt. Klicken Sie einfach aufOK
  7. file comparatorwürde sich öffnen, müssen Sie ändern left side file.
  8. Sobald Sie mit dem korrekten Zusammenführen der Änderungen fertig sind, gehen Sie zur Git StagingAnsicht
  9. stage the changes. dhadd to index
  10. Klicken Sie in derselben Ansicht auf Rebase-> Continue. Wiederholen Sie 7 bis 10, bis alle Konflikte gelöst sind.
  11. aus HistorySicht, wählen Sie Ihre Zeile begehen und wählen SiePush Commit
  12. Aktivieren Sie das Rebase Commits of local.......Kontrollkästchen und klicken Sie auf Weiter. beziehen Sie sich auf warum - Git: Rebase von Upstream auf Entwicklungszweig
  13. klicke auf Finish

Hinweis: Wenn Sie mehrere lokale Repository-Commits haben, müssen Sie diese in einem Commit quetschen, um mehrere Zusammenführungen zu vermeiden.


Ich bin damit einverstanden, Rebase anstelle von Merge zu verwenden. Es ist besser, da es kein unnötiges Zusammenführungs-Commit erzeugt. (Off Topic: Stack Overflow ist völlig lächerlich und lehnt meinen Kommentar nur aufgrund der Tatsache ab, dass ich ursprünglich "+1 für" geschrieben habe. Mein Kommentar ist vollkommen konstruktiv, danke.)
nyuszika7h

4

Konfigurieren Nachdem Sie den Code gedrückt haben , wenn Sie eine abgelehnte Nachricht erhalten, klicken Sie auf Konfigurieren und dann auf Spezifikation hinzufügen, wie in diesem Bild gezeigt

Quellreferenz und Zielreferenz Dropdown und klicken Sie auf den Ref / Heads / Yourbranchname und klicken Sie erneut auf Add Spec

Geben Sie hier die Bildbeschreibung ein Stellen Sie sicher, dass Sie die Aktualisierung erzwingen auswählen

Geben Sie hier die Bildbeschreibung ein Speichern Sie den Code und senden Sie ihn an das Repo


3

Öffnen Sie die Git-Ansicht:

1- Wählen Sie Ihr Projekt aus und wählen Sie Zusammenführen. 2- Wählen Sie Remote Tracking. 3- Klicken Sie auf OK

Git führt den Remote-Zweig mit dem lokalen Repository zusammen

4- dann drücken


1

Dieser Fehler bedeutet, dass das Remote-Repository andere Commits hatte und vor Ihrer lokalen Zweigstelle auf und ab ging.
Ich versuche einen Git Pull zu machen, gefolgt von einem Git Push. Wenn es keine widersprüchlichen Änderungen gibt, ruft git pull den neuesten Code in meinen lokalen Zweig ab, während meine Änderungen intakt bleiben.
Dann schiebt ein Git-Push meine Änderungen in den Master-Zweig.


Es scheint, dass vielen Menschen diese einfache Lösung fehlt: D
Black

0

Ich habe festgestellt, dass Sie auf dem neuesten Commit des Git sein müssen. Dies sind also die folgenden Schritte: 1) Stellen Sie sicher, dass Sie nicht an denselben Dateien gearbeitet haben, da sonst ein DITY_WORK_TREE-Fehler auftritt. 2) Ziehen Sie die neuesten Änderungen. 3) Übernehmen Sie Ihre Updates.

Hoffe das hilft.


-1
  1. Gehen Sie in Github und erstellen Sie ein Repo für Ihren neuen Code.
  2. Verwenden Sie die neue https- oder ssh-URL in Eclise, wenn Sie den Push zum Upstream ausführen.
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.