Per completare la tua risposta, la sintassi è davvero
git show object
git show $REV:$FILE
git show somebranch:from/the/root/myfile.txt
git show HEAD^^^:test/test.py
Il comando utilizza il solito stile di revisione, il che significa che è possibile utilizzare uno dei seguenti:
- nome del ramo (come suggerito da ash )
HEAD
+ x numero di ^
caratteri
- L'hash SHA1 di una data revisione
- I primi (forse 5) personaggi di un dato hash SHA1
Suggerimento È importante ricordare che quando si utilizza " git show
", specificare sempre un percorso dalla radice del repository , non la posizione corrente della directory.
(Sebbene Mike Morearty menzioni che, almeno con git 1.7.5.4, è possibile specificare un percorso relativo inserendo " ./
" all'inizio del percorso, ad esempio:
git show HEAD^^:./test.py
)
Con Git 2.23+ (agosto 2019), puoi anche utilizzare git restore
che sostituisce il git checkout
comando confuso
git restore -s <SHA1> -- afile
git restore -s somebranch -- afile
Ciò ripristinerebbe sull'albero di lavoro solo il file presente nel "source" ( -s
) commit SHA1 o ramo somebranch
.
Per ripristinare anche l'indice:
git restore -s <SHA1> -SW -- afile
( -SW
: abbreviazione di --staged --worktree
)
Prima di git1.5.x, ciò è stato fatto con alcuni impianti idraulici:
git ls-tree <rev>
mostra un elenco di uno o più oggetti "BLOB" all'interno di un commit
git cat-file blob <file-SHA1>
cat un file come è stato eseguito il commit in una revisione specifica (simile a svn cat). usa git ls-tree per recuperare il valore di un dato file-sha1
git cat-file -p $(git-ls-tree $REV $file | cut -d " " -f 3 | cut -f 1)::
git-ls-tree elenca l'ID oggetto per $ file nella revisione $ REV, questo viene tagliato dall'output e usato come argomento per git-cat-file, che in realtà dovrebbe essere chiamato git-cat-object, e semplicemente dump quell'oggetto a stdout.
Nota: da Git 2.11 (Q4 2016), è possibile applicare un filtro di contenuto git cat-file
all'output!
Vedi commit 3214594 , commit 7bcf341 (09 set 2016), commit 7bcf341 (09 set 2016) e commit b9e62f6 , commit 16dcc29 (24 ago 2016) di Johannes Schindelin ( dscho
) .
(Unita da Junio C Hamano - gitster
- in commit 7889ed2 , 21 set 2016)
cat-file
: supporto --textconv
/ --filters
in modalità batch
Anche se " git hash-objects
", che è uno strumento per prendere un flusso di dati sul filesystem e inserirlo nell'archivio oggetti Git, ha permesso di eseguire le conversioni "da mondo esterno a Git" (ad esempio conversioni e applicazioni di fine linea del filtro pulito), e aveva la funzione attiva di default fin dai primissimi tempi, la sua operazione inversa " git cat-file
", che prende un oggetto dal negozio di oggetti Git ed esternalizza per il consumo da parte del mondo esterno, mancava di un meccanismo equivalente a eseguire il "Git-to-outside-world"
git config diff.txt.textconv "tr A-Za-z N-ZA-Mn-za-m <"
git cat-file --textconv --batch
Nota: " git cat-file --textconv
" ha iniziato a segfaulting di recente (2017), che è stato corretto in Git 2.15 (4 ° trimestre 2017)
Vedi commit cc0ea7c (21 set 2017) di Jeff King ( peff
) .
(Unita da Junio C Hamano - gitster
- in commit bfbc2fc , 28 set 2017)
Nota che per sovrascrivere / sostituire un file con un contenuto passato, non dovresti più usare il comando confusogit checkout
, ma git restore
(Git 2.23+, Agosto 2019)
git restore -s <SHA1> -- afile
Ciò ripristinerebbe sull'albero di lavoro solo il file presente nel -s
commit "source" ( ) SHA1.
Per ripristinare anche l'indice:
git restore -s <SHA1> -SW -- afile
( -SW
: abbreviazione di --staged --worktree
)
git show
(inutilmente) usa una sintassi diversa con due punti.git show 2c7cf:my_file.txt