git merge -F - liest nicht von der Standardeingabe

Viele git-Befehle nehmen die Commit-Nachricht mit -F - von der Standardeingabe entgegen. git merge gehört nicht dazu: Es sucht eine Datei mit dem Namen „-", bricht mit „could not read file" ab – und führt den Merge nicht aus.

Bei git commit ist es gängige Praxis, eine mehrzeilige Nachricht per Here-Dokument zu übergeben. Bei git merge sieht dasselbe Muster genauso aus – funktioniert aber nicht.

Terminal

# funktioniert
git commit -F - <<'MSG'
Mehrzeilige Nachricht
MSG

# bricht ab: error: could not read file '-'
git merge --no-ff develop -F - <<'MSG'
Merge develop: ...
MSG

Tückisch ist die Kombination aus zwei Eigenschaften: Die Fehlermeldung nennt nur den Dateinamen - und klingt nach einem Tippfehler, und der Merge wird nicht ausgeführt. In einem Skript, das den Rückgabewert nicht prüft, sieht es hinterher so aus, als sei nichts passiert – der Branch steht unverändert da.

Der Weg, der funktioniert

MSGF=$(mktemp)
cat > "$MSGF" <<'MSG'
Merge develop: Zusammenfassung

Details ...
MSG
git merge --no-ff develop -F "$MSGF"
rm -f "$MSGF"

Alternativ tut es für kurze Nachrichten -m, das mehrfach angegeben werden darf und je Angabe einen Absatz erzeugt. Für Deploy-Skripte gilt ohnehin: nach jedem git-Aufruf den Rückgabewert prüfen, statt sich auf die Ausgabe zu verlassen.


Erstellt am: