human
Expliquez ce que fait "git reset". Je viens d'un environnement SVN et Git est un tout nouveau paradigme. J'ai facilement compris Mercurial, mais Git est beaucoup plus technique.
Je pense que ```git reset``` est proche de ```hg revert```, mais il semble qu'il y ait des différences. Veuillez inclure des explications détaillées sur :

* les options ```--hard```, ```--soft``` et ```--merge```;
* la notation étrange que vous utilisez avec ```HEAD``` telle que ```HEAD^``` et ```HEAD~1```;
* des cas d'utilisation concrets et des flux de travail;
* les conséquences sur la copie de travail, le ```HEAD``` et votre niveau de stress global
gpt
Rappelez-vous qu'en ```git``` vous avez :

* le pointeur ```HEAD```, qui vous indique sur quel commit vous travaillez
* l'arborescence de travail, qui représente l'état des fichiers sur votre système
* la zone de préparation (également appelée index), qui "prépare" les modifications afin qu'elles puissent être ultérieurement validées ensemble


> Veuillez inclure des explications détaillées sur :
  ```--hard```, ```--soft``` et ```--merge```;

Dans l'ordre croissant de dangerosité :

* ```--soft``` déplace ```HEAD``` mais ne touche pas à la zone de préparation ni à l'arborescence de travail.
* ```--mixed``` déplace ```HEAD``` et met à jour la zone de préparation, mais pas l'arborescence de travail.
* ```--merge``` déplace ```HEAD```, réinitialise la zone de préparation et tente de déplacer toutes les modifications de votre arborescence de travail vers la nouvelle arborescence de travail.
* ```--hard``` déplace ```HEAD``` et ajuste votre zone de préparation et votre arborescence de travail sur le nouveau ```HEAD```, en supprimant tout.


> cas d'utilisation concrets et flux de travail ;


* Utilisez ```--soft``` lorsque vous souhaitez passer à un autre commit et corriger les choses sans "perdre votre place". C'est assez rare que vous en ayez besoin.

```
# Exemple de git reset --soft
touch foo                            // Ajoutez un fichier, apportez des modifications.
git add foo                          //
git commit -m "mauvais message de commit"   // Commit... D'oh, c'était une erreur !
git reset --soft HEAD^               // Revenez en arrière d'un commit et corrigez les choses.
git commit -m "bon commit"          // Voilà, maintenant c'est correct.
```
--

* Utilisez ```--mixed``` (qui est la valeur par défaut) lorsque vous voulez voir à quoi ressemblent les choses à un autre commit, mais que vous ne voulez pas perdre les modifications que vous avez déjà effectuées.
* Utilisez ```--merge``` lorsque vous voulez passer à un nouvel endroit mais incorporer les modifications que vous avez déjà dans l'arborescence de travail.
* Utilisez ```--hard``` pour tout effacer et commencer à partir d'une nouvelle base avec le nouveau commit.