Content
Rebase verwenden wir nur, wenn wir ALLEINE auf unserem Branch arbeiten. Rebase modifierziert alle Commits, das heißt sollte jemand anderst deinen privaten Branch verwenden, so hat diese Person nun eine ganz andere git History als du.
Der Vorteil von Rebase gegenüber Merge ist eine geradliniege nachvollziehbare git history.
Master aktualisieren und davon abzweigen
- Wenn du mit einem neuen Ticket beginnst, wechsle zuerst in den master Branch und hole alle Änderungen, mit git pull origin master.
- Soll für das neue Ticket ein eigener branch erstellt werden, so erstelle diesen mit git checkout -b task_123. Arbeitest du immer nur auf einem eigenen Branch für alle Tickets, so erstelle ebenfalls diesen.
Änderungen machen
Erstelle nun die Änderungen auf deinem privaten Branch.
- git add irgendwas
- git commit
- git push origin branchname
- usw.
Zurück damit in den Master
Willst du deine Änderungen nun anderen zur Verfügung stellen, so müssen diese auf den master Branch transferiert werden. Wie geht das?
Folgend werden wir nur eine gebräuchliche Methode kennen lernen, zuerst den master rebasen, dann privaten branch in master mergen:
- Bevor die Änderungen in den Master gehen, müssen wir sicherstellen dass dieser auch aktuell ist, wechsle dazu in den master Branch, pulle dann die Änderungen.
- Wechsle zurück in deinen privaten Branch
- Gib nun git rebase master ein. Rebase vergleicht in diesem Fall deinen privaten Branch mit dem master Branch. Alle commits die auf dem master gemacht wurden, seit du von diesem abgezweigt hast, werden in deinem eigenen Branch ganz unten eingefügt. Die folgende Grafik, sollte das recht gut darstellen. Dein eigener Branch wäre im Bild der Feature Branch.
https://de.atlassian.com/git/tutorials/rewriting-history/git-rebase
- Beim rebasen können Konflikte auftreten. Beachte hier die Ausgabe von git.
- Sind keine Konflikte aufgetreten. So können Wir zum nächsten Punkt weiter, ansonsten, gehts hier weiter.
- Zum Mergen von Dateien, gib git mergetool ein.
- Es öffnet sich Meld und nun muss die linke und die rechte Seite in der mitte zusammengeführt werden.
- Wird Meld geschlossen, so gilt die Datei als gemerged.
- Sind alle Mergekonflikte gelöst, gib git rebase --continue ein. Treten weitere Konflikte auf, das ist theoretisch möglich für jeden Commit der im privaten Branch gemacht wurde, so gehe wieder zurück zu Schritt 3)
- Soll ein rebase abgebrochen werden, so gib git rebase --abort ein, und beginne von vorn.
- Sind alle Konflikte gelöst, so können die Änderungen auch im privaten Branch, wenn dieser noch benötigt wird gepushed werden. Hierzu wird aber ein git push origin branchname -f benötigt. Da der lokale private Branch, nichtmehr mit dem server Branch zusammenstimmt. Die Option -f sollte nie auf dem master Branch angewendet werden.
Nun wirklich zurück damit in den Master
- Willst du deinen private Branch nun pushen so benötigst du, da die Commits umgeschrieben wurden ein git push origin branchname -f
- Wechsle zurück in den master Branch.
- Gib git merge branchname ein.
- git push origin master
- Fertig (Im besten Fall)