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~nper 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 fooin questo esempio; puoi usare un percorso completo):
git show $(git rev-list --max-count=1 --all -- foo)^:foo
L' rev-listinvocazione cerca tutte le revisioni di fooma ne elenca solo una. Poiché rev-listelenca 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-listritorna così com'è perché foonon esiste più lì. Devi chiedere quello appena prima che contiene l'ultima revisione del file, da qui il file ^in git show.
**/foose 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-abbrevche fornisce un output simile a git (o svn) log.
path/to/fileè il percorso completo dall'inizio del progetto (directory superiore del repository).