web-dev-qa-db-fra.com

Git: extraire un fichier d'un commit précédent et le modifier en HEAD

J'ai récemment envoyé un fichier au HEAD de ma branche contenant des erreurs. Je dois faire les choses suivantes:

  • Récupère ce fichier depuis un commit antérieur à HEAD 

  • Renvoyer ce fichier dans HEAD 

Quelle est la meilleure façon de s'y prendre?

61
Coocoo4Cocoa

Vous l'avez pratiquement dit vous-même:

Récupère d'abord le fichier d'un commit avant:

$> git checkout HEAD~1 path/to/file.ext

Puis commettez-le:

$> git commit -a -m 'Retrieved file from older revision'

Si seules les modifications apportées à ce fichier étaient présentes dans la dernière validation, vous pouvez même utiliser git-revert:

$> git revert HEAD

Je pense qu'il serait préférable d'en faire un commit séparé, car cela vous dit exactement ce que vous avez annulé et pourquoi. Cependant, vous pouvez écraser ceci dans la validation précédente en utilisant le commutateur --amend en git-commit.

93
sykora

Attention, dans ce scénario:

Commit hash - File modified
aaaaaaa       index.php
bbbbbbb       test.php
ccccccc       index.php

Git checkout HEAD ~ 1 (ou HEAD ^) index.php essaie d'extraire le fichier index.php avec un hachage précédent HEAD (bbbbbbb) mais ce n'est pas le fichier de hachage de validation précédent, ccccccc. Dans le hachage précédent HEAD, index.php reste inchangé car la dernière modification a été apportée dans le hachage ccccccc.

Pour rétablir le fichier avec le hachage de validation précédent ayant affecté le fichier, utilisez:

git log -n 2 --pretty=format:%h path/to/file.ext

Ignorer le premier hash et prendre le second hash, puis:

git checkout <second_hash> path/to/file.ext
git commit -m 'Revert this file to real previous commit'
0
Tecnocat