J'ai supprimé un fichier avec Git puis validé, donc le fichier n'est plus dans ma copie de travail. Je veux regarder le contenu de ce fichier, mais pas vraiment le restaurer. Comment puis-je faire ceci?
J'ai supprimé un fichier avec Git puis validé, donc le fichier n'est plus dans ma copie de travail. Je veux regarder le contenu de ce fichier, mais pas vraiment le restaurer. Comment puis-je faire ceci?
Réponses:
git show HEAD^:path/to/file
Vous pouvez utiliser un identifiant de validation explicite ou HEAD~n
pour voir des versions plus anciennes ou s'il y a eu plus d'un commit depuis que vous l'avez supprimé.
fatal: Invalid object name 'HEAD^'.
(je dois mentionner que je n'ai que "Initial commit")
S'il s'agit d'un fichier que vous avez supprimé il y a quelque temps et que vous ne souhaitez pas rechercher une révision , vous pouvez utiliser (le fichier est nommé foo
dans cet exemple; vous pouvez utiliser un chemin complet):
git show $(git rev-list --max-count=1 --all -- foo)^:foo
L' rev-list
appel recherche toutes les révisions de foo
mais n'en répertorie qu'une. Étant donné que les rev-list
listes sont dans l'ordre chronologique inverse, ce qu'elle répertorie est la dernière révision qui a changé foo
, qui serait le commit qui a été supprimé foo
. (Ceci est basé sur l'hypothèse que git ne permet pas à un fichier supprimé d'être modifié et de rester supprimé.) Vous ne pouvez pas simplement utiliser la révision qui rev-list
retourne telle quelle car elle foo
n'existe plus là-bas. Vous devez demander celui juste avant qui contient la dernière révision du fichier, d'où le ^
in git show
.
**/foo
si vous ne connaissez pas le chemin (cela fonctionnera pour la commande rev-list mais pas pour la commande show. Cependant, avec le commit de la commande rev-list, vous pouvez alors trouver le chemin).
Puisque vous ne vous souvenez peut-être pas du chemin exact, vous pouvez à la place obtenir le sha1 à partir du journal git, puis vous pouvez simplement émettre
git cat-file -p <sha1>
git whatchanged --no-abbrev
cela donne une sortie similaire à git (ou svn) log.
path/to/file
s'agit du chemin complet depuis le haut du projet (répertoire supérieur du référentiel).