Appearance
Kapitel 14: Weiterführende Lernswege
14.1 Fortgeschrittene Git-Funktionen
📖 git rebase (Fortgeschrittene)
Was ist git rebase?
rebaseverschiebt Commits auf einen neuen Basis-Commit.- Im Gegensatz zu
mergewird die Historie linear (keine Merge-Commits).
🔹 1. Einfaches Rebase
bash
# Auf feature-branch
git checkout feature-login
# Develop in feature-branch rebasen
git rebase developErgebnis:
Vorher:
develop: A --- B
\
feature: C --- D
Nachher (rebase):
develop: A --- B --- C' --- D'🔹 2. Interaktives Rebase (git rebase -i)
Mit interaktivem Rebase können Sie die Historie bereinigen (vor dem Pushen!).
bash
# Letzte 3 Commits bereinigen
git rebase -i HEAD~3Öffnet einen Editor mit Optionen:
pick a1b2c3d Erster Commit
pick e4f5g6h Zweiter Commit
pick i7j8k9l Dritter Commit
# Befehle:
# p, pick = Commit verwenden
# r, reword = Commit-Nachricht ändern
# e, edit = Commit anhalten (um ihn zu ändern)
# s, squash = Commit mit vorherigem zusammenfassen
# d, drop = Commit löschenBeispiel (Commits zusammenfassen):
pick a1b2c3d Erster Commit
squash e4f5g6h Zweiter Commit
pick i7j8k9l Dritter Commit🔹 3. rebase vs. merge (Vergleich)
| Aspekt | rebase | merge |
|---|---|---|
| Historie | Linear, sauber | Verzweigt, mit Merge-Commits |
| Sicherheit | Gefährlich (ändert Historie) | Sicher (ändert keine Historie) |
| Empfehlung | Nur für lokale, nicht gepushte Commits | Für alle geteilten Branches |
Goldene Regel:
Rebasen Sie niemals Commits, die Sie bereits gepusht haben!
14.2 git cherry-pick (Einzelne Commits anwenden)
📖 Was ist git cherry-pick?
cherry-pick wendet die Änderungen eines einzelnen Commits auf einen anderen Branch an.
🔹 1. Cherry-Pick verwenden
bash
# 1. Commit-Hash finden, den Sie anwenden möchten
git log --oneline feature-branch
# Ausgabe:
# a1b2c3d Feature: Login hinzugefügt
# 2. Auf Ziel-Branch wechseln
git checkout develop
# 3. Cherry-Pick ausführen
git cherry-pick a1b2c3dErgebnis:
- Die Änderungen von
a1b2c3dwerden aufdevelopangewendet. - Es wird ein neuer Commit mit neuem Hash erstellt.
🔹 2. Cherry-Pick bei Konflikten
Wenn ein Konflikt auftritt:
bash
# 1. Konflikt lösen (Datei bearbeiten)
# 2. Datei zur Staging Area hinzufügen
git add konflikt-datei.js
# 3. Cherry-Pick fortsetzen
git cherry-pick --continue
# Oder abbrechen:
git cherry-pick --abort🔹 3. Anwendungsfall für Cherry-Pick
Szenario: Sie haben einen Bugfix in feature-A gemacht, brauchen ihn aber dringend in main.
bash
# 1. Auf main wechseln
git checkout main
# 2. Bugfix-Commit (aus feature-A) cherry-picken
git cherry-pick bugfix-commit-hash14.3 CI/CD und Git (Überblick)
📖 Was ist CI/CD?
- CI (Continuous Integration): Automatisches Bauen und Testen bei jedem Push.
- CD (Continuous Deployment): Automatisches Bereitstellen (Deployment) nach erfolgreichem CI.
🔹 1. CI/CD mit GitHub Actions (Beispiel)
Datei: .github/workflows/ci.yml
yaml
name: CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm install
- run: npm testWas passiert?
- Bei jedem Push auf
main/developoder PR wird:- Repository ausgecheckt
- Node.js installiert
- Abhängigkeiten installiert (
npm install) - Tests ausgeführt (
npm test)
🔹 2. CI/CD mit GitLab CI
Datei: .gitlab-ci.yml
yaml
stages:
- test
- deploy
test:
stage: test
script:
- npm install
- npm test
deploy:
stage: deploy
script:
- npm run build
- ./deploy.sh
only:
- main🔹 3. Best Practices für CI/CD
| Tipp | Erklärung |
|---|---|
| Tests schreiben | CI ist nutzlos ohne Tests |
| Schnelle Builds | CI sollte in < 10 Minuten fertig sein |
| Kleine Commits | Einfacher zu debuggen bei Fehlern |
| Branches schützen | main nur via PR mergen (mit CI-Check) |
14.4 Git-Interna (Objekte, Referenzen)
📖 Git-Objekte (Vereinfacht)
Git speichert Daten in 4 Objekttypen:
| Objekttyp | Erklärung |
|---|---|
| Blob | Dateiinhalt (binär) |
| Tree | Verzeichnisstruktur (Zeigt auf Blobs und andere Trees) |
| Commit | Snapshot (Zeigt auf Tree, hat Autor, Nachricht, etc.) |
| Tag | Zeigt auf einen Commit (für Releases) |
🔹 1. .git-Ordner untersuchen
bash
# .git/objects auflisten
find .git/objects -type f
# Ein Objekt anzeigen (ersten 2 Zeichen des Hashes sind der Ordnername)
git cat-file -p a1b2c3dBeispielausgabe (Commit-Objekt):
tree e4f5g6h...
parent i7j8k9l...
author Max Mustermann <max@example.com> 1716825600 +0200
committer Max Mustermann <max@example.com> 1716825600 +0200
Feature: Login hinzugefügt🔹 2. Referenzen (refs)
Referenzen sind Zeiger auf Commits.
| Referenz-Typ | Pfad | Erklärung |
|---|---|---|
| HEAD | .git/HEAD | Zeigt auf den aktuellen Branch (oder Commit) |
| Branch | .git/refs/heads/ | Zeigt auf den letzten Commit des Branches |
| Remote | .git/refs/remotes/ | Zeigt auf den letzten Commit des Remote-Branches |
| Tag | .git/refs/tags/ | Zeigt auf einen Commit (oder ein Tag-Objekt) |
Beispiel:
bash
# HEAD anzeigen
cat .git/HEAD
# Ausgabe: ref: refs/heads/main
# Branch-Referenz anzeigen
cat .git/refs/heads/main
# Ausgabe: a1b2c3d... (Hash des letzten Commits)🔹 3. git gc (Garbage Collection)
Git bereinigt automatisch unnötige Objekte.
bash
# Manuell ausführen (oft nicht nötig)
git gc --aggressiveWann ist git gc nützlich?
- Nach vielen
git rebaseodergit resetOperationen - Wenn das Repository sehr groß geworden ist
📝 Zusammenfassung
In diesem Kapitel haben Sie gelernt:
- ✅
git rebase(und warum man es mit Vorsicht genießen sollte) - ✅
git cherry-pick(einzelne Commits anwenden) - ✅ CI/CD-Grundlagen (GitHub Actions, GitLab CI)
- ✅ Git-Interna (Objekte, Referenzen,
.git-Ordner)
Nächstes Kapitel: Wir werden Lernressourcen empfehlen (Bücher, Kurse, Tools).
🔗 Weiterführende Links
Copyright © 2024 Git-Tutorial für Anfänger
