Da Anonimo (non verificato) , 29 Aprile 2026

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

OpzioneDescrizione
-d <ref> [<oldvalue>]Cancella un ref (opzionalmente compare-and-swap).
--no-derefNon segue ref simbolici.
--create-reflogCrea un reflog se mancante.
-m <reason>Ragione del reflog per questo aggiornamento.
--stdinLegge 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