5482 votes

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

J'ai apporté quelques modifications à un fichier qui a été commis à quelques reprises dans le cadre d'un groupe de fichiers, mais maintenant vous souhaitez réinitialiser/annuler les modifications sur le retour à une version précédente.

J'ai fait un git log avec un git diff de trouver la révision dont j'ai besoin, mais juste avoir aucune idée de comment faire pour obtenir le fichier de revenir à son ancien état dans le passé.

Toute aide est grandement appréciée.

7395voto

Greg Hewgill Points 356191

En supposant que le commit que vous voulez est - abcde:

git checkout abcde file/to/restore

Le git checkout homme page donne plus d'informations.

Comme une note de côté, j'ai toujours été mal à l'aise avec cette commande car il est utilisé pour deux choses ordinaires (en changeant entre les branches) et inhabituelle des choses destructrices (en enlevant les changements dans le répertoire de travail).

723voto

Chris Lloyd Points 5346

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

git diff <commit hash> <filename>

Ensuite, pour revenir à un fichier spécifique qui s'engagent à utiliser la commande de réinitialisation:

git reset <commit hash> <filename>

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

Un bon flux de travail pour managaging waypoints est d'utiliser des balises à proprement marquer le plus de points dans votre timeline. Je ne comprends pas très bien votre dernière phrase, mais ce que vous voulez est divergent d'une branche à partir d'un point antérieur dans le temps. Pour ce faire, utilisez la poire commande checkout:

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

Vous pouvez ensuite rebase qu'à l'encontre de votre réseau principal lorsque vous êtes prêt à fusionner ces changements:

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

421voto

foxxtrot Points 6491

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

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

355voto

Greg Hewgill Points 356191
git checkout -- foo

Qui sera remise à zéro foo à la TÊTE. Vous pouvez également:

git checkout HEAD^ foo

pour une révision de retour, etc.

114voto

bbrown Points 2620

J'ai eu le même problème tout à l'heure et j'ai trouvé cette réponse la plus simple à comprendre (commit-ref est le SHA de la valeur de la variation dans le journal que vous souhaitez revenir à l'):

git checkout [commit-ref] [filename]

Cela permettra de mettre cette ancienne version dans votre répertoire de travail et à partir de là que vous pouvez vous engager si vous le souhaitez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X