snippets · bash
Mein Push wird als non-fast-forward abgelehnt – wie finde ich heraus, warum?
git push wird abgelehnt, weil dein lokaler Branch hinter seinem Remote-Gegenstück liegt. Der Reflex git pull kann richtig sein – aber zuerst lohnt sich die Frage: Was ist auf beiden Seiten passiert?
Analyse statt Blindflug
git fetch origin
git log --oneline --left-right --graph HEAD...origin/main
Links (<) stehen Commits, die nur lokal vorhanden sind. Rechts (>) stehen Commits, die nur auf origin/main vorhanden sind.
Zusätzlich hilfreich:
git status -sb
Das zeigt kompakt, ob dein Branch ahead, behind oder beides ist.
Typische Fälle
Nur behind: Lokal hast du nichts Eigenes auf main. Dann ist ein Fast-Forward normalerweise passend:
git pull --ff-only origin main
Ahead und behind: Die Historien sind auseinander gelaufen. Jetzt brauchst du bewusst Merge oder Rebase – nicht Force-Push als Abkürzung.
Du hast eigentlich auf einem Feature-Branch gearbeitet: Dann gehört dein lokaler Commit möglicherweise gar nicht nach main. Erst Branch-Situation klären.
Warum --ff-only nützlich ist
Es verhindert, dass ein einfacher Aktualisierungsschritt überraschend einen Merge-Commit erzeugt. Wenn Fast-Forward nicht möglich ist, stoppt Git und zwingt dich zu einer bewussten Entscheidung.
git push --force löst hier nicht die Ursache. Es kann stattdessen Remote-Historie überschreiben.