Utilisation de git show
Pour compléter votre propre réponse, la syntaxe est en effet
git show object
git show $REV:$FILE
git show somebranch:from/the/root/myfile.txt
git show HEAD^^^:test/test.py
La commande prend le style habituel de révision, ce qui signifie que vous pouvez utiliser n'importe lequel des éléments suivants :
- le nom de la branche (comme Proposition de par cendres )
-
HEAD
+ x nombre de ^
caractères
- Le hachage SHA1 d'une révision donnée
- Les quelques premiers caractères (peut-être 5) d'un hachage SHA1 donné
Conseil Il est important de se rappeler que lorsque vous utilisez " git show
", Toujours spécifier un chemin à partir de la racine du référentiel. et non la position actuelle de votre répertoire.
(Bien que Mike Morearty mentionne que, au moins avec git 1.7.5.4, vous pouvez spécifier un chemin relatif en mettant " ./
"au début du chemin. Par exemple :
git show HEAD^^:./test.py
)
Utilisation de git restore
Avec Git 2.23+ (août 2019), vous pouvez également utiliser git restore
qui remplace la confusion git checkout
commande
git restore -s <SHA1> -- afile
git restore -s somebranch -- afile
Cela permettrait de restaurer sur l'arbre de travail uniquement le fichier tel qu'il est présent dans le fichier "source" ( -s
) commit SHA1 ou branch somebranch
.
Pour restaurer également l'index :
git restore -s <SHA1> -SW -- afile
( -SW
: abréviation de --staged --worktree
)
Comme indiqué dans les commentaires par starwarswii
Il vous permet de placer le contenu dans un fichier, ce qui est idéal si vous voulez simplement comparer rapidement les fichiers d'un commit.
Par exemple, vous pouvez le faire :
git show 1234:path/to/file.txt > new.txt
git show 1234~:path/to/file.txt > old.txt
puis les comparer.
Utilisation des commandes de bas niveau de git plumbing
Avant git1.5.x, ceci était fait avec un peu de plomberie :
git ls-tree <rev>
afficher une liste d'un ou plusieurs objets 'blob' dans un commit
git cat-file blob <file-SHA1>
cat un fichier tel qu'il a été livré dans une révision spécifique (similaire à svn cat). utiliser git ls-tree
pour récupérer la valeur d'un fichier-sha1 donné
git cat-file -p $(git-ls-tree $REV $file | cut -d " " -f 3 | cut -f 1)::
git-ls-tree
liste l'ID de l'objet pour $file
en révision $REV
ce qui est coupé de la sortie et utilisé comme un argument à git-cat-file
qui devrait en fait s'appeler git-cat-object
et jette simplement cet objet dans stdout
.
Remarque : depuis Git 2.11 (Q4 2016), vous pouvez appliquer un filtre de contenu à l' git cat-file
sortie.
Voir commettre 3214594 , commit 7bcf341 (09 Sep 2016), commit 7bcf341 (09 Sep 2016), et commettre b9e62f6 , commettre 16dcc29 (24 août 2016) par Johannes Schindelin ( dscho
) .
(fusionné par Junio C Hamano -- gitster
-- en commettre 7889ed2 , 21 Sep 2016)
git config diff.txt.textconv "tr A-Za-z N-ZA-Mn-za-m <"
git cat-file --textconv --batch
Note : " git cat-file --textconv
" a commencé à se mettre en défaut récemment (2017), ce qui a été corrigé dans Git 2.15 (Q4 2017).
Véase commettre cc0ea7c (21 Sep 2017) par Jeff King ( peff
) .
(fusionné par Junio C Hamano -- gitster
-- en commettre bfbc2fc , 28 Sep 2017)
102 votes
La clé ici :
git show
utilise (de manière peu utile) une syntaxe différente avec un deux-points.git show 2c7cf:my_file.txt
4 votes
Pour clarifier davantage, la commande ci-dessus demande à git d'afficher deux objets distincts, une révision et un fichier. La réponse acceptée ci-dessous, qui utilise un deux-points entre les deux objets, demande un fichier spécifique à une révision spécifique.
2 votes
Sur *nix, vous n'avez pas besoin de PAGER, il suffit de rediriger la sortie du shell avec
>
1 votes
Duplication possible de Existe-t-il une commande git rapide pour voir une ancienne version d'un fichier ?
0 votes
Checat a un commentaire important, pour ceux qui veulent que le contenu soit exporté vers un fichier quelconque. Vous avez besoin de quelque chose comme ceci : git show {sha}:mon_fichier.txt > old_my_file.txt
0 votes
D'après le titre de la question, cela semble être la bonne réponse . Sur la base du reste du contenu de la question, cette réponse semble le plus utile. Il m'a fallu quelques minutes pour réaliser que les deux semblent assez différents, j'espère que ce commentaire permettra à d'autres de gagner du temps.
0 votes
@rbatt Plus tout à fait : ce serait (aujourd'hui, 2019)
git restore
pasgit checkout
. Véase ma réponse éditée .0 votes
Si vous cherchez la réponse pour retrouver tous les fichiers sous un sous-répertoire dans l'historique de révision de Git, lisez ceci : stackoverflow.com/a/62342847/94148