Komplexe Merge-Szenarien

Fortgeschrittenes Git

Amanda Crawford-Adamo

Software and Data Engineer

Repo der Flugreise-Datenpipeline

Ein Diagramm des Repos der Flugreise-Datenpipeline mit Verzeichnis und Dateien. Das Git-Arbeitsverzeichnis hat vier Dateien: etl.py, load.py, transform.py und ingest.py. Das data-Verzeichnis enthält den Ordner flight_data.csv. Zusätzlich ist der .git-Ordner dargestellt.

Fortgeschrittenes Git

Git Squash Merge

$$

Funktion

  • Erstellt einen einzigen neuen Commit auf dem Ziel-Branch
  • Kombiniert alle Änderungen vom Quell-Branch
    • Fügt einen normalen Commit mit einem Parent hinzu (anders als die rekursive Strategie)
  • Dem Ziel-Branch hinzugefügt (nicht dem Feature-Branch)
    • Bewahrt die detaillierte Commit-Historie des Quell-Branches nicht

$$

Vorteile

  • Saubere, lineare Historie
  • Vereinfacht Code-Reviews für große Features
  • Leicht, das gesamte Feature rückgängig zu machen
Fortgeschrittenes Git

Beispiel: Squash Merge

Der Branch data-cleanup verzweigt vom main-Branch nach dem zweiten Commit. Der main-Branch hat einen zusätzlichen Commit. data-cleanup hat zwei zusätzliche Commits.

Fortgeschrittenes Git

Ablauf: Squash Merge

  1. Main-Branch auschecken

    $ git checkout main
    
  2. Squash-Commit aller data-cleanup-Änderungen erstellen

    $ git merge --squash data-cleanup
    
  3. Squash-Commit in die main-Historie committen

    $ git commit -m "Implement and optimize data cleanup"
    
Fortgeschrittenes Git

Ergebnis: Squash Merge

Ein Diagramm mit zwei Branches: main und data-cleanup. main hat vier Commits. Der Feature-Branch verzweigt nach dem neuesten main-Commit mit einem zusätzlichen Commit. Der neueste main-Commit ist ein Single-Parent-Commit-Objekt, das die zusammengefassten Commits der zusätzlichen data-cleanup-Commits enthält.

Fortgeschrittenes Git

Git Octopus Merge

$$

Funktion

  • Merged drei oder mehr Branches auf einmal
  • Erstellt einen einzelnen Merge-Commit mit mehreren Parents
  • Am besten, wenn Branches keine Konflikte haben

$$

Vorteile

  • Nützlich, um mehrere unabhängige Features gleichzeitig zu integrieren
  • Zum Synchronisieren mehrerer Release-Branches für verschiedene Projektversionen
Fortgeschrittenes Git

Beispiel: Octopus Merge

Darstellung von vier Entwicklungs-Branches: main, ingestion, transform und load. ingestion, transform und load verzweigen vom main-Branch nach dem ersten Commit, jeder mit einem zusätzlichen Commit. Der main-Branch hat ebenfalls einen zusätzlichen Commit.

Fortgeschrittenes Git

Octopus-Merge-Befehle

Git-Octopus-Merge-Befehl

git merge -s octopus

Beispiel

$ git merge -s octopus ingest transform load
Trying simple merge with ingest
Trying simple merge with transform
Trying simple merge with load
Merge made by the 'octopus' strategy.
...
Fortgeschrittenes Git

Ergebnis: Octopus Merge

Darstellung von vier Entwicklungs-Branches: main, ingestion, transform und load. ingestion, transform und load verzweigen vom main-Branch nach dem ersten Commit, jeder mit einem zusätzlichen Commit. main hat fünf Commits, die die Commits der anderen Branches enthalten. Zusätzlich ist der letzte Merge-Commit als Objekt mit vier Parents dargestellt: vorheriger neuester main-Commit und die neuesten Commits von ingest, transform und load.

Fortgeschrittenes Git

Zusammenfassung

Squash Merge

  • Vereinfacht die Historie, fasst mehrere Commits zu einem zusammen
  • Nutze Squash-Merges für eine saubere, einfache Historie
    git merge --squash <source_branch>
    

Octopus Merge

  • Erhält die Branch-Struktur
  • Merged mehrere Branches gleichzeitig
  • Effizient zur Integration paralleler Entwicklungen
    git merge -s octopus <branch 1> <branch 2> <branch 3>
    
Fortgeschrittenes Git

Lass uns üben!

Fortgeschrittenes Git

Preparing Video For Download...