add doc
This commit is contained in:
106
git_cheat_sheet.md
Normal file
106
git_cheat_sheet.md
Normal file
@@ -0,0 +1,106 @@
|
||||
# 🚀 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 <commit-hash>
|
||||
```
|
||||
|
||||
**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".
|
||||
Reference in New Issue
Block a user