# 🚀 Git Cheat Sheet: Branches, Merge, Rebase & VS Code ## 🌳 Branches (Zweige) * **`main`** → Stabiler Stand, Production-ready (Deployment). * **`dev`** → Aktive Entwicklung, Sammelbecken fĂŒr Features. --- ## 🛠 ZusammenfĂŒhren von Änderungen ### Git Merge FĂŒhrt zwei Zweige zusammen. Git sucht den letzten gemeinsamen Basispunkt und erstellt einen neuen **Merge-Commit**. ```bash git checkout dev git merge main ``` | Details | | |-----------|--------| | Wann? | In Team-Branches, bei bereits gepushten Branches, wenn StabilitĂ€t wichtiger als eine saubere History ist. | | Vorteile | Sicher, einfach nachvollziehbar, schreibt die History nicht um. | | Nachteile | Die History kann bei vielen Merges unĂŒbersichtlich ("Spaghetti-Graph") werden. | ### Git Rebase Setzt deine Commits neu auf die Spitze eines anderen Branches. Die Commit-IDs werden dabei neu geschrieben. ```bash git checkout dev git rebase main ``` | Details | | |-----------|--------| | Wann? | In lokalen Feature-Branches (bevor sie geteilt werden), um die History sauber zu halten. | | Vorteile | Erzeugt eine perfekt lineare, leicht lesbare History. | | Nachteile | ⚠ GefĂ€hrlich auf geteilten/öffentlichen Branches. Konflikte mĂŒssen ggf. fĂŒr jeden einzelnen Commit gelöst werden. | --- ## 📩 TemporĂ€res Speichern & Spezialbefehle ### Stash (Das "Regal") Speichert uncommitted Changes temporĂ€r, um das Arbeitsverzeichnis sauber zu machen, ohne zu committen. ```bash git stash # Änderungen "parken". git stash pop # Änderungen zurĂŒckholen und Stash leeren. ``` **Wann?** Wenn du schnell den Branch wechseln musst, aber deine Arbeit noch nicht fertig ist. ### Cherry-pick Kopiert einen ganz gezielten Commit von einem Branch in deinen aktuellen. ```bash git cherry-pick ``` **Wann?** Wenn ein Bugfix auf dem falschen Branch gelandet ist oder du nur eine einzige Funktion aus einem Feature-Branch brauchst. --- ## 🔄 Checkout & Switch ```bash git checkout dev # oder git switch dev – Wechselt zum Branch. git checkout -f dev # Force Checkout: Wechselt den Branch und verwirft alle ungespeicherten lokalen Änderungen unwiderruflich! ⚠ ``` --- ## đŸ’» VS Code Git-Optionen (UI) VS Code bietet beim Branch-Wechsel oft drei intelligente Optionen an: * **Migrate Changes ⭐** * Nimmt deine aktuellen Änderungen einfach mit in den neuen Branch. * (Intern: stash → switch → stash pop). * **Stash & Checkout** * Parkt deine Änderungen sicher im Stash und wechselt den Branch. Die Änderungen bleiben im Stash, bis du sie manuell wieder herausholst. * **Force Checkout ⚠** * Wechselt den Branch und löscht deine aktuellen, ungespeicherten Änderungen. Nur nutzen, wenn die Arbeit weggeworfen werden kann. --- ## 🔄 Typischer Sync-Workflow Um den Entwicklungs-Branch aktuell zu halten, nachdem dev in main gemerged wurde: 1. Auf dev entwickeln. 2. Merge dev → main fĂŒr das Release. 3. ZurĂŒck auf dev wechseln: ```bash git checkout dev git merge main # (oder rebase), um den neuesten Stand vom Main wieder in Dev zu haben. ``` --- ## 🧠 MerksĂ€tze * **Merge** = Historien verbinden (Sicher & Dokumentiert). * **Rebase** = Historie neu schreiben (Linear & Sauber). * **Stash** = "Ich parke das mal kurz hier." * **Migrate Changes** = Sicherer Branch-Wechsel mit "GepĂ€ck".