web-dev-qa-db-fra.com

Comment effectuer l'équivalent TFS de 'Annuler les modifications en attente'

Comment puis-je effectuer l'équivalent de «Annuler les modifications en attente» de TFS dans Git, sur un ou plusieurs fichiers?

Cela signifie essentiellement faire ces étapes:

  • Annuler les modifications sur le disque
  • Réinitialisation des modifications découvertes par Git
  • Obtenir les dernières modifications sur le fichier de Git

Il serait bon de connaître les différences (s’il en existe) dans les commandes permettant de faire cela si (1) vient de le changer sur le disque, sans l’ajouter , mais aussi lorsque vous avez (2) fait l'ajout-commande et pour un bonus, (3) même lorsque vous avez validé la modification .

31
Seb Nilsson

Pour 1 et 2, tout ce que vous avez à faire est de:

 git stash -u #same effect as git reset --hard, but can be undone

cela jettera tous les changements. Faites attention si vous utilisez reset. Découvrez comment manipuler l'index et les permutations des options hard, soft et mixtes avec reset et checkout. Le livre progit explique cela en détail: http://progit.org/2011/07/11/reset.html

Pour 3,

 git reset --hard HEAD^

mais il serait préférable d’émettre un git stash -u avant cela - juste au cas où vous auriez des modifications en attente.

Cela réinitialisera la branche actuelle sur le parent de la validation actuelle. Recherchez "tree-ish" en ligne. ^ et ~ N après une référence vous permettront de pointer vers n'importe quel point accessible de l'historique de cette référence. Pour comprendre comment l’histoire est suivie dans git, "Git pour les scientifiques" explique bien le graphe acyclique dirigé: http://eagain.net/articles/git-for-computer-scientists/

Pour obtenir des fichiers individuels à partir de l'état du commit en cours (c'est-à-dire, jeter les modifications), vous pouvez utiliser checkout

git checkout HEAD -- <a list of files>

Si vous avez émis la dernière commande de réinitialisation ci-dessus par erreur, vous ne rencontrez aucun problème. Git garde la trace des branches utilisées pour pointer dans le reflog.

git reflog

vous listera l'histoire. Vous pouvez voir dans cette sortie comment référencer chacune d'elles, donc:

git reset --hard HEAD@{1}

réinitialisera la branche à l'endroit où il y avait 1 changement auparavant.

Pour ajouter, si vous voulez effacer les fichiers ignorés et les fichiers non suivis, vous pouvez effacer avec ceci:

git clean -xdf
33
Adam Dymitruk

Cette commande annulera les modifications locales et les restaurera dans les versions actuelles du référentiel:

git reset --hard

Vous pouvez revenir à votre dernier commit valide en émettant:

git reset --hard HEAD

Si vous voulez juste restaurer un seul fichier, utilisez plutôt git checkout:

git checkout -- file_name.extension
git checkout HEAD file_name.extension
5
Manu
  1. git checkout [path] ou (rapport complet) git reset --hard HEAD
  2. git reset [path] suivi de git checkout [path]
  3. git reset --hard [commit] pour restaurer l’état du référentiel à [commit], qui doit être un tree-ish
2
Fred Foo

Mon équivalent à TFS undo dans Git avec Eclipse est simplement de cliquer avec le bouton droit de la souris sur le fichier et de sélectionner Replace with -> HEAD Revision (ou la version de votre choix).

0