So führen Sie den Remote-Master mit dem lokalen Zweig zusammen

237

Ich habe einen lokalen Zweig eines Projekts ("configUpdate"), den ich aus dem Projekt eines anderen herausgegabelt habe, und ich habe eine Menge Änderungen daran vorgenommen und möchte die vorgenommenen Änderungen in meinem lokalen Zweig zusammenführen.

ich habe es versucht

git pull --rebase origin configUpdate

Aber die letzten Änderungen wurden nicht berücksichtigt. Wie kann ich die beiden zusammenführen? (auch für Bonuspunkte, was habe ich mit dem pull --rebaseBefehl gemacht?)

Martyn
quelle
Mögliches Duplikat von Git: Führen Sie einen Remote-Zweig lokal zusammen
Michael Freidgeim

Antworten:

354

configUpdateFühren Sie in Ihrem Feature-Zweig (z. B. ) Folgendes aus:

git fetch
git rebase origin/master

Oder die kürzere Form:

git pull --rebase

Warum das funktioniert:

  • git merge branchnameNimmt neue Commits aus dem Zweig branchnameund fügt sie dem aktuellen Zweig hinzu. Bei Bedarf wird automatisch ein "Merge" -Commit hinzugefügt.

  • git rebase branchnameNimmt neue Commits aus der Filiale branchnameund fügt sie "unter" Ihre Änderungen ein. Genauer gesagt ändert es den Verlauf des aktuellen Zweigs so, dass er auf der Spitze von basiert branchname, mit allen Änderungen, die Sie darüber hinaus vorgenommen haben.

  • git pullist im Grunde das gleiche wie git fetch; git merge origin/master.

  • git pull --rebaseist im Grunde das gleiche wie git fetch; git rebase origin/master.

Warum sollten Sie also git pull --rebaselieber verwenden als git pull? Hier ist ein einfaches Beispiel:

  • Sie beginnen mit der Arbeit an einer neuen Funktion.

  • Bis Sie bereit sind, Ihre Änderungen zu pushen, wurden mehrere Commits von anderen Entwicklern gepusht.

  • Wenn Sie git pull(die Zusammenführung verwenden), werden Ihre Änderungen zusätzlich zu einem automatisch erstellten Zusammenführungs-Commit durch die neuen Commits vergraben.

  • Wenn Sie git pull --rebasestattdessen git wird Vorspulen deines Herrn vor-, dann Änderungen an der Spitze an.

Joey Adams
quelle
Ich habe dies in der richtigen Verzweigung getan, aber ich kann immer noch Unterschiede zwischen meinen lokalen Dateien und der Remote-Hauptverzweigung des ursprünglichen Projekts feststellen (obwohl dort steht, dass alles auf dem neuesten Stand ist!). Vielleicht habe ich das Projekt falsch eingerichtet? Wie kann man das überprüfen?
Martyn
1
@ Martin: Die Unterschiede sollten Ihre lokalen Änderungen sein. Machen Sie einen weiteren Zweig des Remote-Zweigs und prüfen Sie, ob dieser den richtigen Dateiinhalt hat.
ZeissS
4
Ich weiß, dass dies eine alte Antwort ist, aber beachten Sie, dass Sie möglicherweise lieber eine MERGE anstelle einer Rebase durchführen möchten. Sie möchten keine Rebase durchführen, wenn Sie später zu einem Remote-Repo zusammengeführt werden müssen, das bereits einige Ihrer Änderungen enthält.
Domino
1
Wie wäre es (vorausgesetzt, Sie befinden sich derzeit im Zweig configUpdate) ... git pull ist im Grunde dasselbe wie git fetch; Git Merge Origin / Master. <- NICHT WAHR
Chris
@ Chris: In welchem ​​Sinne ist es nicht wahr? Die Annahme von Herkunft / Master als Upstream? Oder wurde Git Pull geändert?
Joey Adams
80

Ich fand heraus, dass es war:

$ git fetch upstream
$ git merge upstream/master
Martyn
quelle
6
Wenn Sie es also nicht bereits herausgefunden haben, haben Sie pull --rebasenicht funktioniert, weil Sie originauf Ihre Gabel zeigten. Es hätte funktioniert, wenn Sie es getan hätten git pull --rebase upstream/master.
Karl Bielefeldt
3
Versuchen Sie: Git Merge Origin / Master
Chris
Mir fehlte ein Abruf, diese Antwort löste es für mich.
Nurettin
38

Wechseln Sie zu Ihrer lokalen Niederlassung

> git checkout configUpdate

Führen Sie den Remote-Master mit Ihrer Zweigstelle zusammen

> git rebase master configUpdate

Wenn Sie Konflikte haben, korrigieren Sie diese und führen Sie für jede Konfliktdatei den Befehl aus

> git add [Pfad_zu_Datei / Konfliktdatei] (z. B. git add app / assets / javascripts / test.js)

Rebase fortsetzen

> git rebase - weiter

Serge Seletskyy
quelle
Haben Sie keine Angst, Rebase anstelle von Merge zu verwenden. Verbringen Sie einige Zeit damit, den Unterschied zu untersuchen, wenn Sie die Lücke in diesen Fragen spüren
Serge Seletskyy,
13

Git Rebase schien für mich nicht zu funktionieren. Nach der Git-Rebase wurde beim Versuch, Änderungen in meinen lokalen Zweig zu übertragen, immer wieder eine Fehlermeldung angezeigt ("Hinweis: Aktualisierungen wurden abgelehnt, da sich die Spitze Ihres aktuellen Zweigs hinter dem Remote-Gegenstück befindet. Integrieren Sie die Remote-Änderungen (z. B. 'Git Pull'). .. ') vor dem erneuten Drücken. ") auch nach dem Ziehen des Git. Was schließlich für mich funktioniert hat, war Git Merge.

git checkout <local_branch>
git merge <master> 

Wenn Sie ein Anfänger wie ich sind, finden Sie hier einen guten Artikel über Git Merge vs Git Rebase. https://www.atlassian.com/git/tutorials/merging-vs-rebasing

AJC
quelle