web-dev-qa-db-fra.com

Restaurer le fichier de l'ancien commit dans git

J'ai un vieux commit que j'ai fait il y a quelques semaines. Je veux restaurer un seul fichier à partir de ce commit. Que fais-je?

166
Varun Achar
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 hash (comme dd9bacb) va bien faire)

N'oubliez pas de valider le changement (après un examen ...)

192
sehe
  1. Extrayez le fichier de votre ancien commit via git checkout [Revision_Key] -- path/to/file.
  2. Ajouter, valider, pousser selon le cas.
77
Urs Reupke

Je devais 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:

  1. git log -
    Ceci montre les trois derniers commits. Lisez les commentaires et le nom de l'auteur afin de préciser la version exacte souhaitée. Notez cet identifiant de validation long (c.-à-d. B6b94f2c19c456336d60b9409fb1e373036d3d71) pour la version de livraison souhaitée.

  2. git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71 - myfile.Java
    Transmettez l'identifiant de validation ET le nom du fichier que vous voulez restaurer. Assurez-vous d'avoir un espace avant et après le double trait d'union.

Il y a beaucoup d'autres façons de le faire. Mais celui-ci est le plus simple dont je puisse me souvenir. J'espère que ça t'as aidé.

REMARQUE: Si vous êtes dans le chemin/dossier de votre projet, il n'est pas nécessaire de taper le chemin d'accès au fichier complet dans la commande de paiement.

5
Salvador Valencia

Toutes les réponses mentionnent git checkout <tree-ish> -- <pathspec>. A partir de git v2.23.0, il existe une nouvelle méthode git restore qui est supposée assumer une partie de ce que git checkout était responsable de. Voir les points saillants des changements sur blog github .

Le comportement par défaut de cette commande est de restaurer l'état d'un arbre de travail avec le contenu provenant du paramètre source (qui dans votre cas sera un hachage de validation).

En supposant que le hash de commit est abcdef, la commande devrait ressembler à ceci:

git restore --source=abcdef file_name

qui (par défaut) le met dans l’arbre de travail. Si vous souhaitez mettre la modification directement dans l'index afin qu'elle puisse être immédiatement validée:

git restore --source=abcdef --worktree --staged file_name

ou avec des noms d'option courts:

git restore -s=abcdef -W -S file_name
0
mjarosie