web-dev-qa-db-fra.com

git "revert" répertoire courant

Dans svn, il est possible de faire svn revert ./* dans lequel le répertoire en cours et UNIQUEMENT le répertoire en cours est rétabli.

Quel est le git équivalent à svn revert dans lequel seul le répertoire courant est rétabli?

Je sais qu'il y a git reset --hard, mais il annule tout et pas seulement le répertoire courant.

Comment pourrais-je rétablir uniquement le répertoire actuel dans git?

28
pillarOfLight

Comme le dit @vcsjones, la solution ici est git checkout:

git checkout <refspec> -- path/to/directory  # or path/to/file

<refspec> peut, par exemple, être HEAD, c'est-à-dire le commit de travail courant. Notez que cette utilisation de la commande checkout affectera l'arborescence de travail MAIS PAS L'INDEX.

git revert est utilisé pour "annuler une validation", et par cela, il ne faut PAS comprendre que la validation disparaît de l'arborescence (cela ferait des ravages avec l'historique - si vous le souhaitez, regardez git rebase -i). Un commit inversé consiste à appliquer, en sens inverse, toutes les modifications du commit données en argument à l'arborescence et à créer un nouveau commit avec les changements (avec un message de commit par défaut , que vous pouvez modifier).

54
fge

Accédez au dossier que vous souhaitez rétablir et procédez comme suit:

git checkout -- .

Voir plus dans cette réponse: https://stackoverflow.com/a/16589534/207661

20
Shital Shah

Quand j'étais git novice (et que j'avais peur du terminal), j'ai trouvé que le moyen le plus simple était de:

  • passer à la branche dans laquelle vous souhaitez rétablir votre sous-répertoire spécifique
  • copiez le sous-répertoire que vous souhaitez restaurer sur votre bureau
  • revenir à votre succursale
  • écraser le sous-répertoire que vous souhaitez remplacer dans votre répertoire git par celui que vous avez copié sur votre bureau
6
David Spence