Warum akzeptiert git update-ref Referenzen, die nicht / refs sind?

Während Befehle wie "git log" unterschiedliche Ausdrücke für denselben Verweis akzeptieren, z. B.

refs/heads/master
heads/master
master

das ist nicht wahr für "git update-ref". Beispielsweis

git ,update-ref master HEAD^

ist nicht dasselbe wie

git update-ref refs/heads/master HEAD^

Der erste Befehl erstellt ein neues ref .git / master (und führt wiederum eine Mehrdeutigkeit in Bezug auf refs / heads / master ein). Nur der zweite Befehl aktualisiert wirklich den Kopf des Meisters. (.git / refs / heads / master)

Warum akzeptiert git update-ref Verweise ohne das Präfix "refs /"? Sollte es nicht mindestens eine Warnung oder eine Befehlszeilenoption geben, um die Erstellung solcher Verweise zu erzwingen?

Es hat ziemlich lange gedauert, bis ich herausgefunden habe, warum

git update-ref master HEAD^

hat nicht wie erwartet funktioniert.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage