J'ai un ancien commit que j'ai fait il y a quelques semaines. Je souhaite restaurer un seul fichier à partir de ce commit. Que fais-je?
J'ai un ancien commit que j'ai fait il y a quelques semaines. Je souhaite restaurer un seul fichier à partir de ce commit. Que fais-je?
Réponses:
git checkout 'master@{7 days ago}' -- path/to/file.txt
Cela ne modifiera pas HEAD, cela écrasera simplement le fichier local path/to/file.txt
Voir man git-rev-parse pour les spécifications de révision possibles (bien sûr un simple hachage (comme dd9bacb
) fera très bien l'affaire)
N'oubliez pas de valider le changement (après un examen ...)
revision-specification
puisque c'est ce que l'OP a demandé :)
shacommit~1
(ex:) git checkout 0f4bbdcd~1 -- path/to/file.txt
pour obtenir le commit juste avant.
git checkout [Revision_Key] -- path/to/file
.git checkout
peut gérer des fichiers uniques (voir réponse par sehe), pas besoin de copier et coller.
HEAD
, ORIG_HEAD
ou l' un des combinés avec ^
/ ~
/ @
notation de style.
J'avais besoin de restaurer un fichier récent commis dans git. Donc, juste pour réitérer et donner une autre perspective, vous devez le faire en exécutant les deux étapes suivantes:
git log -3
Cela montre les trois commits les plus récents. Lisez les commentaires et le nom de l'auteur afin de préciser la version exacte que vous souhaitez. Notez ce long ID de validation (par exemple b6b94f2c19c456336d60b9409fb1e373036d3d71
) pour la version de validation souhaitée.
git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71 -- myfile.java
Transmettez l'ID de validation ET le nom du fichier que vous souhaitez restaurer. Assurez-vous que vous disposez d'un espace avant et après le double tiret.
Il existe de nombreuses autres façons de le faire, mais c'est la plus simple dont je me souvienne.
REMARQUE: Si vous vous trouvez dans le chemin / dossier de votre projet, il n'est pas nécessaire de taper le chemin d'accès complet du fichier dans la commande d'extraction.
Toutes les réponses mentionnent git checkout <tree-ish> -- <pathspec>
. Depuis git v2.23.0, il existe une nouvelle méthode de restauration git qui est censée assumer une partie de ce dont elle git checkout
était responsable. Voir les faits saillants des changements sur le blog github .
Le comportement par défaut de cette commande est de restaurer l'état d'une arborescence de travail avec le contenu provenant du source
paramètre (qui dans votre cas sera un hachage de validation).
En supposant que le hachage de validation est abcdef
la commande ressemblerait à ceci:
git restore --source=abcdef file_name
qui (par défaut) le met dans l'arborescence de travail. Si vous souhaitez mettre la modification directement dans l'index afin qu'elle puisse être validée immédiatement:
git restore --source=abcdef --worktree --staged file_name
ou avec des noms d'options courts:
git restore -s=abcdef -W -S file_name