Comment restaurer un dossier vers un commit particulier en créant un patch


97

Voici mon historique pour le dossier 'somefolder'

$ git log somefolder

commit 89cd
More changes to somefolder

commit ef47a
Updating somefolder and other stuff

commit e095
Bugs fixed in somefolder

Je veux ramener un dossier au commit «Bogues corrigés dans un dossier».

Puisque le deuxième commit impliquait des changements en dehors d'un dossier, je ne veux pas revenir sur ce commit.

Je suppose que le moyen le plus sûr serait de créer un diff / patch entre le commit e095 et 89cd qui s'applique uniquement à un dossier, puis d'appliquer ce patch. Comment puis je faire ça?

Réponses:


156

Vous pouvez utiliser git checkout pour mettre à jour votre référentiel vers un état spécifique.

git checkout e095 -- somefolder

Quant à votre question sur la génération du diff, cela fonctionnerait aussi. Générez simplement le diff pour passer de votre état actuel à e095:

git diff 89cd..e095 -- somefolder

30
cela ne supprime pas les fichiers qui ont été ajoutés dans ce commit, utilisez à la git reset e095 -- some/folderplace
shime

3
Depuis git 2.22, vous pouvez utiliser --no-overlayfor git checkoutpour que les fichiers suivis qui ne sont pas dans le commit que vous extrayez soient supprimés.
Mariusz Pawelski

54

Vous pouvez utiliser git resetpour réinitialiser l'index, ce qui inclura également la suppression des fichiers qui ont été ajoutés dans des commits plus récents ( git checkoutne le fait pas seul):

git reset e095 -- somefolder

Cependant, git resetne met pas à jour la copie de travail et l' --hardoption ne fonctionne pas avec les dossiers. Alors utilisez git checkoutpour rendre la copie de travail identique à l'index:

git checkout -- somefolder

puis si vous souhaitez également supprimer les fichiers ajoutés, vous devez également faire:

git clean -fd somefolder

cette réponse fonctionne pour moi lorsque le répertoire inclut de nouveaux fichiers.
Yahoho

2
Cette réponse est bien meilleure si vous voulez vraiment un instantané propre du référentiel à ce moment-là.
data princess

Bien mieux en effet!
Alexis Pautrot
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.