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~npour 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é foodans cet exemple; vous pouvez utiliser un chemin complet):
git show $(git rev-list --max-count=1 --all -- foo)^:foo
L' rev-listappel recherche toutes les révisions de foomais n'en répertorie qu'une. Étant donné que les rev-listlistes 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-listretourne telle quelle car elle foon'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.
**/foosi 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-abbrevcela donne une sortie similaire à git (ou svn) log.
path/to/files'agit du chemin complet depuis le haut du projet (répertoire supérieur du référentiel).