Question Réinitialiser ou rétablir un fichier spécifique à une révision spécifique en utilisant Git?


J'ai apporté quelques modifications à un fichier qui a été commis plusieurs fois dans le cadre d'un groupe de fichiers, mais je souhaite maintenant réinitialiser / rétablir les modifications sur une version précédente.

J'ai fait un git log avec un git diff pour trouver la révision dont j'ai besoin, mais je n'ai aucune idée de la façon de remettre le fichier dans son état antérieur.


3443
2017-10-18 23:34


origine


Réponses:


En supposant que le hachage du commit que vous voulez est c5f567:

git checkout c5f567 -- file1/to/restore file2/to/restore

le git caisse La page man donne plus d'informations.

Si vous voulez revenir à la validation avant c5f567, append ~1 (fonctionne avec n'importe quel nombre):

git checkout c5f567~1 -- file1/to/restore file2/to/restore

En guise de remarque, j'ai toujours été mal à l'aise avec cette commande car elle est utilisée pour les choses ordinaires (changement entre les branches) et les choses inhabituelles et destructrices (rejetant les changements dans le répertoire de travail).


4654
2017-10-18 23:39



Vous pouvez rapidement consulter les modifications apportées à un fichier à l'aide de la commande diff:

git diff <commit hash> <filename>

Ensuite, pour rétablir un fichier spécifique à cette validation, utilisez la commande reset:

git reset <commit hash> <filename>

Vous devrez peut-être utiliser le --hard option si vous avez des modifications locales.

Un bon flux de travail pour la gestion des waypoints consiste à utiliser des balises pour marquer des points dans votre montage. Je ne comprends pas très bien votre dernière phrase, mais ce que vous pouvez vouloir, c'est diverger une branche d'un moment antérieur. Pour ce faire, utilisez la commande d'extraction pratique:

git checkout <commit hash>
git checkout -b <new branch name>

Vous pouvez ensuite le rebaser contre votre ligne principale lorsque vous êtes prêt à fusionner ces modifications:

git checkout <my branch>
git rebase master
git checkout master
git merge <my branch>

508
2017-12-17 06:59



Vous pouvez utiliser n'importe quelle référence à un commit git, y compris le SHA-1 si c'est le plus pratique. Le point est que la commande ressemble à ceci:

git checkout [commit-ref] -- [filename]


305
2018-04-07 21:48



git checkout -- foo

Cela va réinitialiser foo diriger. Vous pouvez aussi:

git checkout HEAD^ foo

pour une révision en arrière, etc.


243
2017-08-29 20:56



Et pour revenir à la dernière version validée, qui est le plus souvent nécessaire, vous pouvez utiliser cette commande plus simple.

git checkout HEAD file/to/restore

106
2018-01-14 06:15



J'ai eu le même problème tout à l'heure et j'ai trouvé cette réponse plus facile à comprendre (commit-ref est la valeur SHA du changement dans le journal auquel vous voulez revenir):

git checkout [commit-ref] [filename]

Cela mettra cette ancienne version dans votre répertoire de travail et à partir de là, vous pouvez le valider si vous le souhaitez.


100
2018-05-27 17:52



Si vous connaissez le nombre de validations dont vous avez besoin pour revenir en arrière, vous pouvez utiliser:

git checkout master~5 image.png

Cela suppose que vous êtes sur le master branche, et la version que vous voulez est 5 renvoie.


85
2018-04-07 14:03



Je pense que je l'ai trouvé .... de http://www-cs-students.stanford.edu/~blynn/gitmagic/ch02.html

Parfois, vous voulez juste revenir en arrière et oublier chaque changement passé un certain point parce qu'ils ont tous tort.

Commencer avec:

$ git log

qui vous montre une liste des validations récentes, et leurs hachages SHA1.

Ensuite, tapez:

$ git reset --hard SHA1_HASH

pour restaurer l'état à un commit donné et effacer définitivement tous les nouveaux commit de l'enregistrement.


75
2017-12-17 06:53



Cela a fonctionné pour moi:

git checkout <commit hash> file

Puis validez le changement:

git commit -a

59
2017-08-25 22:12



Vous devez faire attention quand vous dites "rollback". Si vous aviez l'habitude d'avoir une version d'un fichier dans commit $ A, et plus tard faites deux changements dans deux commits séparés $ B et $ C (donc ce que vous voyez est la troisième itération du fichier), et si vous dites " Je veux revenir à la première ", le voulez-vous vraiment?

Si vous voulez vous débarrasser des changements à la fois la deuxième et la troisième itération, c'est très simple:

$ git checkout $A file

et alors vous commettez le résultat. La commande demande "Je veux extraire le fichier de l'état enregistré par le commit $ A".

D'autre part, ce que vous vouliez dire, c'est de se débarrasser du changement apporté à la seconde itération (c'est-à-dire commit $ B), tout en gardant ce que commit $ C a fait au fichier, vous voudriez revenir à $ B

$ git revert $B

Notez que quiconque a créé commit $ B n'a peut-être pas été très discipliné et a peut-être commis des changements totalement indépendants dans le même commit, et cette inversion peut toucher des fichiers autres que fichier vous voyez des modifications incriminées, donc vous voudrez peut-être vérifier le résultat attentivement après cela.


53
2018-01-11 08:13