diff --git a/git_cheat_sheet.md b/git_cheat_sheet.md index 1cb44c0..ad03c9f 100644 --- a/git_cheat_sheet.md +++ b/git_cheat_sheet.md @@ -41,6 +41,60 @@ git stash pop # (optional) Änderungen zurückholen. --- +## **Git: dev zurücksetzen & „main ist Chef“** + +Problem + +Beim Arbeiten mit Git passiert oft Folgendes: + +- `dev` hat Commits, die nicht in `main` sind +- diese Commits brauche ich nicht mehr +- beim `git rebase origin/main` will Git trotzdem mergen oder Konflikte lösen + +⚠️ Wichtiges Missverständnis: + +Das sind keine lokalen Änderungen, sondern Commits, die auf `dev` existieren. + +`git reset --hard origin/dev` entfernt nur lokale, nicht gepushte Commits, +aber nicht Commits, die bereits auf `origin/dev` liegen. + +Praktische Befehle & sichere Vorgehensweise + +- Prüfen — welche Commits würden entfernt werden: + +```bash +git fetch origin +git log --oneline origin/main..origin/dev +``` + +- Optional: Backup des aktuellen `origin/dev`, falls etwas schiefgeht: + +```bash +git fetch origin +git branch backup/dev origin/dev +``` + +- Sicheres Zurücksetzen von `dev` auf `main` (lokal + remote): + +```bash +git checkout dev +git fetch origin +git reset --hard origin/main +git push --force-with-lease origin dev +``` + +- Alternative (ohne lokalen Checkout): Push von `main` direkt nach `dev`: + +```bash +git fetch origin +git push --force-with-lease origin origin/main:refs/heads/dev +``` + +- Warnung: Diese Aktionen schreiben die Remote‑History um. Koordiniere dich mit + dem Team bevor du ein Force‑Push ausführst. Verwende `--force-with-lease` + anstelle von `--force` für etwas mehr Sicherheit. + + ## 📦 Temporäres Speichern & Spezialbefehle ### Stash (Das "Regal")