J'ai récemment envoyé un fichier au HEAD de ma branche contenant des erreurs. Je dois faire les choses suivantes:
Quelle est la meilleure façon de s'y prendre?
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
.
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'