Sinossi
git commit-tree <tree> [-p <parent>]... [-m <msg>] [-S]
Descrizione
Il comando git commit-tree costruisce un oggetto commit da uno SHA di tree dato, una lista opzionale di commit parent e un messaggio. Stampa lo SHA del nuovo commit. A differenza di git commit, NON aggiorna alcun ref — il commit risultante è dangling finché non punti un branch o tag ad esso.
Nell'uso quotidiano, git commit-tree 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 lo usa mai direttamente. È un mattone per strumenti che sintetizzano commit programmaticamente: importer, strategie di merge personalizzate, strumenti di riscrittura della storia. filter-repo usa commit-tree internamente.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
-p <parent> | Specifica un commit parent (ripetibile per i merge). |
-m <msg> | Messaggio di commit (o legge da stdin). |
-F <file> | Legge il messaggio da file. |
-S[<keyid>] | Firma GPG il commit. |
Esempi
TREE=$(git write-tree)
COMMIT=$(echo "Initial commit" | git commit-tree "$TREE")
git update-ref refs/heads/main "$COMMIT"
# Costruisce un commit root da zero
PARENT=$(git rev-parse HEAD)
TREE=$(git write-tree)
COMMIT=$(echo "Custom merge" | git commit-tree "$TREE" -p "$PARENT" -p "feature")
git update-ref refs/heads/main "$COMMIT"
# Sintetizza un merge commit personalizzato
Errori comuni
Dimenticare di fare git update-ref lascia il commit dangling — git gc alla fine lo cancellerà. Le variabili d'ambiente author/committer (GIT_AUTHOR_NAME ecc.) devono essere impostate se vuoi identità non predefinite.
Comandi correlati
git write-tree, git update-ref, git commit, git filter-repo