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.