Da Anonimo (non verificato) , 29 Aprile 2026

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

OpzioneDescrizione
-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