[git] Was rebase von branches bedeutet und wie führt man einen rebase mit Eclipse/EGit aus

Ein Beil. Rebase hilft dabei, Commits aufzuteilen und sie in einer Weise zu zerschneiden, wie du sie servieren möchtest und platziert sie exakt an die Stelle, wo sie aus deiner Sicht hingehören. Mit dem Befehl kannst du tatsächlich die Geschichte deines Repositories umschreiben, sei es die Umordnung von Commits, das Zusammenführen in größere Commits, oder sei es das Ignorieren von Commits, wenn du es wünschst.

Warum ist das hilfreich? Eine der verbreitetsten Anwendungsfälle ist die Arbeit an einem bestimmten Feature oder einer Fehlerbehebung in einem separaten Branch. Anstatt häßliche Merge Commits für jede Änderung zu erzeugen, die in den Master Branch überführt werden, könntest du eine große Änderung erzeugen und Rebase alles handhaben lassen. Ein anderer häufig vorkommender Fall für Rebase ist die Pflege von eigenen Änderungen für ein Projekt. Mit Merges wird die Repository-Geschichte mit Upstream-Commits und eigenen Commits vermischt. Mit Rebase wird das verhindert und somit das Repository in einem ausgewogenen Zustand gehalten.

Ein einfaches Beispiel zeigt die Funktionsweise von Rebase. Ich lege einen neuen Branch für mein Feature an, entwickle daran herum und committe meine Änderungen.

$ git checkout -b newfeature
Switched to a new branch „newfeature“
[.. changed some files,made vommits ..]
$ git checkout master
Switched to branch „master“
[.. changed one file, committed ..]

Die History im Repository sieht erstmal so aus (Screenshot von gitx):
rebase1

 

 

 

Jetzt möchte ich die Änderungen zurück in den Master-Branch überführen. Von dort könnte ich die Änderungen mit git merge newfeature mergen. Wenn ich das so mache, sähe die Commit History wie folgendermaßen aus:
rebase2

 

 

 

Es kann auch vorkommen das man 3 branches hat. master, hotfix/bugfix, develop.

Bildschirmfoto Folgendes kann passieren. Ich entwickele auf meinem „develop“ branch neue Features für ein Software. Zwischendurch    werden Bugs gemeldet. Diese Bugs werden auf dem Branch „hotfix/bugfix“ behandelt und dort gefixt. Bugs werden entfernt, anschließend zum Update bereitgestellt. Die Entwicklung kann länger dauern und der Code auf „develop“ out-of-date werden. Was nun!!!

Da der aktuelle code auf master ist, müssen wir den „develop“ Branch rebasen. Also der Aktuellere code von dem „master“ wird in die „develop“  aufgenommen, aktualisiert. Natürlich werden die neuen Features die man entwicklet hat in „develop“ nicht überschrieben. Sondern neue änderungen übernommen.

 

Unter Eclipse kann man dies mit dem plugin EGit komfortabel mit ein paar klicks bewerkstelligen. Zunächst wechselt man in den „master“ branch. Rechtsklick auf ProjectOrdner im Explorer. Team > Switch To > master. Nachdem man in dem „master“ branch ist. Wieder ein rechtsklick auf projectOrdner Team > Rebase…

Screenshot

Es erscheint ein Dialog, wo man den Branch auswählen kann, was man rebasen möchte. Dort wählt man dann den „develop“ branch aus(auf dem screenshot sind zwei Entwickler branches zu sehen develop_ferit und develop_martin, lass euch nicht irren.) In meinem falle würde ich dann develop_ferit auswählen und den „master“ mit „develop“ bzw „develop_ferit“ rebasen.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s