Fortgeschrittene Branch-Integration: Git-Rebase

Fortgeschrittenes Git

Amanda Crawford-Adamo

Software and Data Engineer

Git rebase

  • Methode, um Änderungen zu integrieren
  • Anders als Merge
  • Entfernt Merge-Commits für eine sauberere Historie
  • Hält den Commit-Verlauf linear für mehr Übersicht

Git-Rebase-Befehl:

git rebase <branch_name>
Fortgeschrittenes Git

Rebase-Beispiel – vorher

Ein Bild des Feature-Branches data-cleanup und des main-Branches. Der Feature-Branch verzweigt nach dem zweiten Commit in main. Der main-Branch hat zwei weitere Commits, die nach dem Anlegen von data-cleanup hinzugekommen sind.

Fortgeschrittenes Git

Rebase-Ablauf

  1. Wechsle auf deinen Feature-Branch data-cleanup.
git checkout data-cleanup
  1. Rebase den Branch main auf den Branch data-cleanup.
git rebase main
  • data-cleanup-Commits werden nach dem neuesten Commit in main neu erstellt
  • Rebased data-cleanup-Commits erhalten neue Hashes

Hinweis: Wenn Konflikte auftreten, musst du sie manuell lösen.

Fortgeschrittenes Git

Rebase-Beispiel – nachher

Ein Bild des data-cleanup-Branches, der auf den main-Branch gerebased wurde. Der data-cleanup-Branch enthält nun alle Commits von main, und die data-cleanup-Commits beginnen erst nach allen main-Commits. Der main-Branch ist unverändert.

Fortgeschrittenes Git

Interaktives Rebase

git rebase -i <commit_hash> 

Funktionalität

  • Ermöglicht feine Änderungen an mehreren Commits
  • Öffnet einen Editor

Achtung!

  • Rebasing öffentlicher Branches kann Workflows stören
    • Nutze Rebase nicht auf öffentlichen Branches wie main
  • Lege Teamregeln fest, wann Rebase verwendet wird
Fortgeschrittenes Git

Interaktives Rebase – vorher

$$

Hier ist die Historie des Branches data-validation, bevor wir die Commit-Historie bearbeiten.

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit
Fortgeschrittenes Git

Interaktiver Rebase-Editor

So bearbeitest du die Commit-Historie mit den Befehlen pick und fixup im geöffneten Editor.

$ git rebase -i HEAD~3 
pick ghi9101 Add data validation function
fixup def5678 Fix validation bug
fixup abc1234 Optimize validation performance

# Rebase xyz1234..abc1234 onto HEAD~3(xyz1234) (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# f, fixup <commit> = like "squash", but discard this commit's log message
...
Fortgeschrittenes Git

Interaktives Rebase – nachher

Vorher

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

Nachher

$ git log --oneline data-validatoin
mno6789 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

Die folgenden Commits werden zu einem zusammengefasst:

  • abc1234
  • def5678
  • ghi9101
Fortgeschrittenes Git

Merge versus Rebase

Das Bild zeigt drei Graphen: einen verzweigten Branch-Graphen, den resultierenden Merge-Graphen und den resultierenden Rebase-Graphen

Merge

  • Bewahrt vollständige Historie und Branch-Struktur
  • Erhält den Kontext paralleler Entwicklungen

Rebase

  • Spielt Commits oben auf den Ziel-Branch erneut ab
  • Erzeugt eine lineare Historie
  • Verliert etwas Kontextinformationen
Fortgeschrittenes Git

Wann Merge und wann Rebase?

Merge

Zum Integrieren abgeschlossener Features, unter Beibehaltung des Entwicklungskontexts

Rebase

Zum Aktualisieren von Feature-Branches mit main oder zum Aufräumen vor dem Mergen

Merke

  • Rebase schreibt Historie um – setze es mit Bedacht ein
Fortgeschrittenes Git

Lass uns üben!

Fortgeschrittenes Git

Preparing Video For Download...