Come posso controllare una particolare versione di un file in Git?


87

Come posso controllare una particolare versione di un file in git?

Ho trovato questa mail sulla mailing list , che diceva:

$ git checkout HEAD~43 Makefile
$ git reset Makefile

Ma non capisco come scoprire 'HEAD ~ 43', se faccio a git log aFile, come posso scoprire quale 'HEAD ~ 43' dovrei usare?

E perché devo eseguire git resetper quel file? Che cosa fa?


"git reset <commit> <file>" fa esattamente la stessa cosa di "git checkout <commit> <file>".
Jakub Narębski

2
Se la tua domanda riguarda la sintassi HEAD ~ 43 (documentata in git-rev-parse), chiedi informazioni su questo problema, non su uno non correlato a cui conosci la risposta. "Che cosa significa HEAD ~ 45 e come trovare una versione particolare del file"
Jakub Narębski

secondo lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/… e lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git- reset.html , "git reset <commit> <file>" non fa esattamente la stessa cosa di "git checkout <commit> <file>": "git reset <commit> <file>" ripristina <file> nell'indice da <commit> senza toccare <file> nell'albero di lavoro, ma "git checkout <commit> <file>" aggiorna l'indice per <file> da <commit> e quindi aggiorna <file> nell'albero di lavoro.
yoda

2
Se una delle risposte seguenti ha risposto alla tua domanda, nel modo in cui funziona Stack Overflow, "accetti" la risposta facendo clic sul segno di spunta accanto ad essa; dettagli qui . Ma solo se la tua domanda ha una risposta; in caso contrario, prendi in considerazione l'aggiunta di maggiori dettagli alla domanda e / o commenti sulle risposte dicendo ciò che non è chiaro (ancora).
TJ Crowder

Risposte:


104

Sai a quale commit (es .: la revisione specifica) appartiene il file? Quindi fa:

git checkout <commit> <file>

L'altro comando:

git checkout HEAD~N <file>

È per quando vuoi ottenere una versione del file da un intervallo indietro (cosa che faccio per nostalgia).


19

HEAD~43è solo un albero, quindi puoi usare un hash o un tag. Devi separare treeish dal nome del file con --, altrimenti viene trattato come nome del file. Per esempio.

git checkout v0.45 -- filename
git checkout HEAD^ -- filename
git checkout 16bb1a4eeaa9 -- filename

2

HEAD~43si riferisce al commit (versione) del file. Invece di quello, puoi usare l'hash del commit che ottieni facendo git logsul file. Se vuoi solo il file, non è necessario eseguirlo git reset; è necessario solo se si desidera eseguire il forward-port del file nell'HEAD corrente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.