Quelle est la différence entre Git Revert, Checkout et Reset?

J’essaie d’apprendre à restaurer ou à restaurer des fichiers et des projets à un état antérieur et je ne comprends pas la différence entre git revert , checkout et reset . Pourquoi y a-t-il 3 commandes différentes pour apparemment le même objective, et quand quelqu’un devrait-il choisir l’une ou l’autre?

Ces trois commandes ont des objectives totalement différents. Ils ne sont même pas proches.

git revert

Cette commande crée une nouvelle validation qui annule les modifications apscopes lors d’une validation précédente. Cette commande ajoute un nouvel historique au projet (il ne modifie pas l’historique existant).

git checkout

Cette commande extrait le contenu du référentiel et le place dans votre arbre de travail. Cela peut également avoir d’autres effets, selon la manière dont la commande a été appelée. Par exemple, cela peut également changer la twig sur laquelle vous travaillez actuellement. Cette commande ne modifie pas l’historique.

git reset

Cette commande est un peu plus compliquée. En fait, cela fait deux choses différentes selon la façon dont il est invoqué. Il modifie l’index (appelé “zone de transfert”). Ou il change ce que commet un chef de twig sur lequel pointe actuellement. Cette commande peut modifier l’historique existant (en modifiant la validation référencée par une twig).

En utilisant ces commandes

Si une validation a été faite quelque part dans l’historique du projet, et que vous décidez plus tard que la validation est incorrecte et qu’elle n’aurait pas dû être effectuée, git revert est l’outil du travail. Il annulera les modifications introduites par le mauvais commit, en enregistrant “l’annulation” dans l’historique.

Si vous avez modifié un fichier dans votre arborescence de travail, mais que vous n’avez pas commis la modification, vous pouvez utiliser git checkout pour extraire une copie du fichier provenant du référentiel.

Si vous avez fait un commit, mais que vous ne l’avez pas partagé avec quelqu’un d’autre et que vous décidez que vous ne le voulez pas, vous pouvez utiliser git reset pour réécrire l’historique afin qu’il ne soit jamais exécuté.

Ce ne sont que quelques-uns des scénarios d’utilisation possibles. Il y a d’autres commandes qui peuvent être utiles dans certaines situations, et les trois commandes ci-dessus ont d’autres utilisations.

  • git revert est utilisé pour annuler un précédent commit. Dans git, vous ne pouvez pas modifier ou effacer une validation antérieure. (En fait, vous le pouvez, mais cela peut causer des problèmes.) Au lieu de modifier la validation précédente, revert introduit une nouvelle validation qui annule une validation antérieure.
  • git reset est utilisé pour annuler les modifications de votre répertoire de travail qui n’ont pas encore été validées.
  • git checkout est utilisé pour copier un fichier depuis un autre commit sur votre arbre de travail actuel. Il ne valide pas automatiquement le fichier.
  • git checkout modifie votre arbre de travail,
  • git reset modifie la référence à la twig sur laquelle vous êtes sur les points,
  • git revert ajoute un commit annulant les modifications.

Disons que vous avez commis des commits:

 C B A 

git revert B , créera un commit qui annule les changements dans B

git revert A , créera un commit qui annule les modifications de A , mais ne touchera pas les modifications de B

Notez que si les modifications de B dépendent des modifications de A , le retour de A n’est pas possible.

git reset --soft A , va changer l’historique et le référentiel de validation; le répertoire de transfert et de travail sera toujours à l’état C

git reset --mixed A , modifiera l’historique de la validation, le référentiel et le transfert; le répertoire de travail sera toujours à l’état C

git reset --hard A , va modifier l’historique de validation, le répertoire, le répertoire de git reset --hard A et de travail; vous retournerez à l’état de A complètement.

Si vous avez cassé l’arborescence mais que vous n’avez pas validé le code, vous pouvez utiliser git reset , et si vous souhaitez simplement restaurer un fichier, vous pouvez utiliser git checkout .

Si vous avez cassé l’arbre et que vous avez commis le code, vous pouvez utiliser git revert HEAD .

http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html

Réinitialiser – Au niveau de la validation, la réinitialisation est un moyen de déplacer le bout d’une twig vers un autre commit. Cela peut être utilisé pour supprimer les commits de la twig en cours.

Revert ( Revenir) – Le retour annule un commit en créant un nouveau commit. C’est un moyen sûr d’annuler les modifications, car il n’a aucune chance de réécrire l’historique des validations. Contrastez ceci avec git reset, qui modifie l’historique de validation existant. Pour cette raison, git revert devrait être utilisé pour annuler les modifications sur une twig publique et git reset devrait être réservé pour annuler les modifications sur une twig privée.

Vous pouvez consulter ce lien – Reset, Checkout et Revert