Ho cancellato un file con Git e poi eseguito il commit, quindi il file non è più nella mia copia di lavoro. Voglio esaminare il contenuto di quel file, ma non ripristinarlo effettivamente. Come posso fare questo?
Ho cancellato un file con Git e poi eseguito il commit, quindi il file non è più nella mia copia di lavoro. Voglio esaminare il contenuto di quel file, ma non ripristinarlo effettivamente. Come posso fare questo?
Risposte:
git show HEAD^:path/to/file
È possibile utilizzare un identificatore di commit esplicito o HEAD~n
per vedere versioni precedenti o se è stato eseguito più di un commit da quando è stato eliminato.
fatal: Invalid object name 'HEAD^'.
(devo menzionare che ho solo "commit iniziale")
Se questo è un file che hai cancellato qualche tempo fa e non vuoi cercare una revisione , puoi usare (il file è chiamato foo
in questo esempio; puoi usare un percorso completo):
git show $(git rev-list --max-count=1 --all -- foo)^:foo
L' rev-list
invocazione cerca tutte le revisioni di foo
ma ne elenca solo una. Poiché rev-list
elenca in ordine cronologico inverso, ciò che elenca è l'ultima revisione che è cambiata foo
, che sarebbe il commit che è stato cancellato foo
. (Questo si basa sul presupposto che git non consente di modificare un file eliminato e tuttavia rimane eliminato.) Non è possibile utilizzare semplicemente la revisione che rev-list
ritorna così com'è perché foo
non esiste più lì. Devi chiedere quello appena prima che contiene l'ultima revisione del file, da qui il file ^
in git show
.
**/foo
se non conosci il percorso (questo funzionerà per il comando rev-list ma non per il comando show. Tuttavia con il commit dal comando rev-list puoi trovare il percorso).
Poiché potresti non ricordare il percorso esatto, puoi invece ottenere sha1 da git log, quindi puoi semplicemente emettere
git cat-file -p <sha1>
git whatchanged --no-abbrev
che fornisce un output simile a git (o svn) log.
path/to/file
è il percorso completo dall'inizio del progetto (directory superiore del repository).