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?
git
git-checkout
Varun Achar
la source
la source
Réponses:
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 ...)
la source
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
.la source
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.
la source
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 ellegit 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: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:
ou avec des noms d'options courts:
la source