Ich will dir ein paar pragmatische Git‑Tricks zeigen, die mir in der täglichen Arbeit am meisten Zeit sparen. Ich habe lange genug mit Merge‑Konflikten, verhedderten Branches und fragwürdigen Commit‑Geschichten gekämpft, um zu wissen, dass es nicht nur um Befehle geht – es geht um eine klare Strategie und ein paar einfache Routinen, die Konflikte minimieren und sie, wenn sie doch auftreten, schnell lösbar machen.
Meine Grundregel: kleine, häufige Commits und klare Branch‑Namen
Das klingt banal, aber: je größer der Change, desto größer das Konfliktpotenzial. Ich committe deshalb oft und in klar abgegrenzten Schritten. Ein praktisches Namensschema hilft auch: Feature‑Branches heißen bei mir feat/
- Mini‑Commits: Ein Commit = ein Gedanke/Task.
- Branchnamen: konsistent und sprechend (feat/, fix/, chore/...).
- PR‑Beschreibungen: kurz, mit Ziel und Repro‑Schritten.
Branches sauber verwalten: mein Workflow
Ich arbeite meist mit einer Hauptlinie (main oder master), einem Integrationsbranch (develop oder release) und Feature‑Branches. Mein typischer Ablauf:
- Aus main/develop einen neuen Feature‑Branch erstellen: git switch -c feat/mein‑feature.
- Regelmäßig updaten: git fetch und dann git rebase origin/develop (oder merge, je nach Teamkonvention).
- Wenn fertig: Push und Pull Request. Vor dem Merge: git rebase origin/develop lokal, um Konflikte früh zu lösen.
Warum Rebase? Ich bevorzuge Rebase, weil er die Commit‑History sauber hält. Wenn dein Team Merge‑Commits bevorzugt, nutze Merge – wichtig ist Konsistenz.
Konflikte in 5 Minuten lösen: der schnelle Rettungsplan
Konflikte passieren. Mein 5‑Minuten‑Plan:
- 1) Ruhe bewahren: Konflikte signalisieren, dass Git nicht automatisch entscheiden kann. Keine Panik.
- 2) Überblick verschaffen:
git statuszeigt dir betroffene Dateien.git diffodergit diff --name-only --diff-filter=Ulisten die Konflikte auf. - 3) Kontext anschauen:
git log --merge --oneline -- path/to/fileodergit blamehelfen, wer was geändert hat und warum. - 4) Mergetool nutzen:
git mergetool(z.B. mit Meld, KDiff3, Beyond Compare oder VS Code) visualisiert die Unterschiede. Ich habe eine VS Code‑Integration und löse 80 % der Fälle damit. - 5) Testen & Committen: Dateien markieren
git add, lokal testen,git rebase --continueodergit commit(bei Merge) und pushen.
Wenn du diese Schritte konzentriert durchgehst, brauchst du in den meisten Fällen unter 5 Minuten.
Wichtige Befehle & kurze Erklärungen
| Befehl | Wann nutzen |
git switch -c feat/xyz | Neuen Branch anlegen und wechseln |
git fetch | Remotes synchronisieren (sicherer als direkt pull) |
git rebase origin/develop | History sauber halten, lokale Branches auf aktuelle Basis bringen |
git merge --no-ff feature | Merge mit Commit, wenn du Merge‑Commits bevorzugst |
git stash | WIP speichern, wenn du schnell Branch wechseln musst |
git restore --staged file | Staged Änderungen rückgängig machen |
Praktische Shortcuts und Aliase
Aliase sparen viel Tippzeit. Einige meiner Favoriten in der ~/.gitconfig:
- st = status
- co = switch
- rb = rebase
- lg = log --oneline --graph --all (übersichtliche History)
Beispiel: git config --global alias.lg "log --oneline --graph --all". Nutze solche Aliase für Kommandos, die du oft brauchst.
Rerere, Stash, und wie ich "giftige" Konflikte vermeide
Ein Tool, das bei wiederkehrenden Konflikten Gold wert ist, ist git rerere (reuse recorded resolution). Aktiviert merkt sich Git, wie du Konflikte gelöst hast und wendet dieselbe Lösung erneut an – super bei weit verbreiteten Refactorings.
git config --global rerere.enabled true- Nutze
git stashwenn du schnell einen Kontextwechsel brauchst;git stash popbringt die Arbeit zurück (denk angit stash list).
Ich vermeide große Rewrites in langelebigen Branches. Wenn ein Refactor nötig ist, mache ich ihn in kleinen, abgesonderten Commits und kommuniziere das früh im Team, damit alle ihren Code darauf abstimmen können.
Wenn’s komplizierter wird: Recovery‑Tricks
Manchmal läuft etwas schief. Zwei Rettungsanker, die mir oft geholfen haben:
- git reflog — deine Lebensversicherung. Zeigt alle HEAD‑Bewegungen und ermöglicht das Zurücksetzen auf einen bekannten Zustand.
- git cherry‑pick — einzelne Commits von einem Branch auf einen anderen übernehmen. Sehr nützlich, um nur die relevanten Änderungen zu übertragen.
Beispiel: Du hast aus Versehen auf main committet. Mit git switch -c fix/mywork und git cherry-pick rettest du die Arbeit.
Automatisierung & Prävention
Konflikte reduzieren lässt sich auch durch Automatisierung: Pre‑Push Hooks, CI‑Checks, linters und Code‑Formatierer (z.B. Prettier, ESLint, Black) stellen sicher, dass viele semantische Konflikte gar nicht erst entstehen. Ich nutze Husky für Hooks und GitHub Actions für CI.
- Pre‑commit: Formatierung, Tests und Security‑Scans.
- CI: Branches automatisch gegen develop bauen und testen.
- Protected Branches: Force Push verbieten, Review‑Regeln durchsetzen.
Persönliche Tipps, die tatsächlich helfen
Ein paar pragmatische Gewohnheiten, die mir am meisten gebracht haben:
- Daily Pull: Ein kurzer Pull/Rebase zu Beginn des Tages vermeidet überraschende Konflikte.
- Kommunikation: Sag im Chat, wenn du große Änderungen planst. Kurze Heads‑Up sparen Merge‑Konflikte.
- Code‑Owner: Wenn du kritische Teile änderst, frag früher Kollegen um Review.
- Visual Merge Tools: Nutze sie statt manueller Konfliktmarker, vor allem bei UI/CSS/HTML.
Diese Kombination aus Gewohnheiten, Werkzeugen und ein paar schnellen Befehlen hat mir unzählige Stunden Ärger erspart. Probiere die Tipps aus, passe sie an dein Team an, und du wirst sehen: Konflikte bleiben zwar, aber sie sind kein Zeitfresser mehr.