2012-08-07 17 views
7

Sto lavorando a un progetto in git, e so che in passato (molto prima che avessi il codice) esisteva un file chiamato exec.js. Voglio vedere il contenuto di questo file. Conosco quale repository utilizzato per contenere questo file, ma non conosco il percorso esatto.Cerca e visualizza un file cancellato dal repository

risposta

3

È possibile utilizzare caratteri jolly in git log:

git log -- *exec.js 

vi darà tutti i messaggi di log quando un file chiamato exec.js è stato modificato.

Una volta trovata la cancellazione commit (diciamo A), si potrebbe

git checkout A -- *exec.js 

Questo vi porterà l'ultima versione di exec.js.

Se si desidera visualizzare la storia completa di exec.js, è possibile utilizzare gitk:

gitk -- *exec.js 

Questo vi mostrerà tutte le modifiche di nuovo. Se sei particolarmente interessato a un commit, puoi fare clic con il pulsante destro del mouse sul file nella finestra di dialogo gitk e selezionare lo strumento di diffusione esterna . Questo aprirà lo strumento di diffusione esterna con i file completi, non solo le patch.

+0

Puoi anche fare un ** git diff * revision-before-delete * - * filepath *** per vedere il contenuto completo del file. (Avrà il "-" davanti a ogni riga, poiché ogni riga è stata cancellata dal file.) –

1

È possibile cercare quel particolare file dentro la storia di registro utilizzando -

Se non si dispone di percorsofile poi

git log --diff-filter=D --summary | grep filename 

Se avete percorsofile allora si può usare -

git log -- filepath 
git log -n 1 -- filepath 

e una volta ottenuta la revisione è possibile effettuare il checkout di quella particolare revisione per ottenere quel file

+0

non avete letto la domanda, vero? Hanno detto che ** non conoscono ** il percorso. Questo è il filtro del percorso. Richiede il percorso. È quindi inutile. –

+0

Non conosco il percorso e non avevo il codice quando il file è stato cancellato. – user429400

+0

@JanHudec si .. ma naturalmente deve avere il percorso del repository git.user429400 no? –

0

Non c'è un modo semplice per elencare il nome completo di un file cancellato e il suo contenuto in uno o due comandi. Tuttavia, qui è un alias per iniziare:

$ git config --global alias.find-deleted-file '!f() { for c in `git rev-list HEAD`; do for fnm in `git diff-tree -r --diff-filter=D --name-only $c | grep -P ".*/$1"` ; do echo "$c $fnm" ; git show $c^:$fnm ; echo "" ; done ; done ; } ; f' 

Questo renderà disponibile un Git find-deleted-file alias che cercare un file cancellato (usando diff-tree) con il nome del modello fornito di file (pattern matching fornito da grep -P), visualizzando il commit il file è stato cancellato, il nome completo del file e il suo contenuto prima che fosse cancellato.

Utilizzando il seguente esempio cronologia del repository:

$ git log --all --graph --decorate --oneline --name-only 
* 3f3cba1 (HEAD, master) I 
I 
* 4c8b369 H 
E/H 
* a008343 rm F 
E/F 
* 525a127 FG 
E/F 
E/G 
* 3a10f93 initial 
A 
B 
C 
D 
E/F 

Si potrebbe cercare il eliminati F file usando:

$ git find-deleted-file F 
a008343eec91fe917078209d44ae93ee72fc5acb E/F 
F 
Problemi correlati