La gestione temporanea è un passo prima del processo di commit in git. Cioè, un commit in git viene eseguito in due passaggi: staging e commit effettivo.
Finché un changeset si trova nell'area di staging, git ti permette di modificarlo come preferisci (rimuovi i file di staging con altre versioni di file di staged, rimuovi le modifiche dalla gestione temporanea, ecc.).
Tempo di metafora interrotto:
Considera uno scenario in cui chiami i mover per portare le tue cose dal tuo vecchio appartamento al tuo nuovo appartamento. Prima di farlo, passerai attraverso le tue cose, deciderà cosa porterai con te e cosa butterai via, imballalo in sacchetti e lascialo nel corridoio principale. I commers vengono semplicemente, prendono i sacchetti (già imballati) dal corridoio e li trasportano.
In questo esempio, ogni cosa fino a quando i commers ottengono le tue cose, è la scena: tu decidi cosa va dove, come metterlo in valigia e così via (ad esempio potresti decidere che metà della tua roba verrà buttata via prima che i mover arrivino anche lì - fa parte di allestimento).
Da un punto di vista tecnico, lo staging supporta anche i commit transazionali, dividendo tutte le operazioni in ciò che può fallire (staging) e cosa non può fallire (commit):
Il commit in git viene implementato a livello transazionale, dopo che la staging è riuscita. Diversi passaggi nella gestione temporanea possono non riuscire (ad esempio, è necessario eseguire il commit, ma l'HDD è pieno al 99,9999% e git non ha spazio per eseguire un commit). Ciò non riuscirà nella staging (il tuo repository non sarà danneggiato da un commit parziale) e il processo di staging non influirà sulla cronologia dei commit (non corrompe il tuo repository in caso di errore).