Sinossi
git update-ref [-d] [--create-reflog] <ref> <newvalue> [<oldvalue>]
Descrizione
Il comando git update-ref scrive un nuovo SHA in un ref atomicamente. Con un valore vecchio atteso opzionale, fornisce semantica compare-and-swap per sicurezza. È ciò che i comandi porcelain come git commit e git branch usano sotto il cofano, e ciò che gli script che manipolano ref direttamente dovrebbero usare invece di modificare file in .git/refs/.
Nell'uso quotidiano, git update-ref si integra con alias e CI.
Capire il modello dati di Git aiuta a prevedere i risultati.
Quando usarlo
La maggior parte degli sviluppatori non ne ha mai bisogno. Usalo quando scrivi automazione che crea, sposta o cancella ref in namespace personalizzati (note, replace, sistemi custom), o quando un comando porcelain non è appropriato (es. creare un ref che punta a un tree arbitrario).
Opzioni comuni
| Opzione | Descrizione |
|---|---|
-d <ref> [<oldvalue>] | Cancella un ref (opzionalmente compare-and-swap). |
--no-deref | Non segue ref simbolici. |
--create-reflog | Crea un reflog se mancante. |
-m <reason> | Ragione del reflog per questo aggiornamento. |
--stdin | Legge aggiornamenti da stdin (batch atomico). |
Esempi
git update-ref refs/heads/feature abc123
# Sposta il branch feature al commit abc123
git update-ref -d refs/heads/old-experiment
# Cancella un ref di branch direttamente
git update-ref refs/notes/ci HEAD def456
# Sposta un ref di note personalizzato atomicamente
# Aggiornamento atomico multi-ref via stdin:
printf 'update refs/heads/main %s\nupdate refs/heads/dev %s\n' "$NEW1" "$NEW2" | \
git update-ref --stdin
Errori comuni
Bypassare la sicurezza modificando direttamente i file .git/refs/ può corrompere ref impacchettati o saltare entry reflog. Usa sempre update-ref. Dimenticare di fornire <oldvalue> annulla la protezione compare-and-swap — fornisciti quando puoi.
Comandi correlati
git symbolic-ref, git pack-refs, git for-each-ref, git branch