Lorsque vous modifiez un fichier dans votre référentiel, le changement est d'abord unstaged. Afin de le commettre, vous devez stade, l'ajouter à l'index à l'aide de git add
. Lorsque vous faites un commit, les changements qui se sont engagés sont ceux qui ont été ajoutés à l'index.
git reset
des changements, à tout le moins, d'où votre branche est de pointage. La différence entre --mixed
et --soft
est de savoir si ou non votre index est également modifié. Donc, si nous sommes sur la branche master
avec cette série de commits:
- A - B - C (master)
HEAD
points de C
et l'indice correspond C
.
Quand nous courons git reset --soft B
, master
(et donc de HEAD
) maintenant les points de B
, mais l'indice a encore les changements d' C
; git status
va leur montrer une mise en scène. Donc, si nous courons git commit
à ce stade, nous allons obtenir un nouveau commit avec les mêmes modifications que C
.
Ok, donc à partir de là, de nouveau:
- A - B - C (master)
Maintenant, nous allons faire git reset --mixed B
. Une fois de plus, en master
et HEAD
point B, mais cette fois l'indice est également modifié pour correspondre B
. Si nous courons git commit
à ce stade, rien ne se passera car l'indice correspond HEAD
. Nous avons encore les changements dans le répertoire de travail, mais depuis ils ne sont pas dans l'index, git status
affiche comme unstaged. Pour les valider, vous serait - git add
puis de valider, comme d'habitude.
Et enfin, --hard
est le même que --mixed
(il change votre HEAD
et de l'indice), sauf qu' --hard
modifie également votre répertoire de travail. Si nous en sommes à l' C
et exécutez git reset --hard B
, puis les modifications ajoutée en C
, ainsi que tous les changements que vous avez, sera supprimé, et les fichiers de votre copie de travail correspondra à commettre B
. Puisque vous pouvez perdre définitivement les changements de cette façon, vous devez toujours exécuter git status
avant de faire un hard reset pour vous assurer que votre répertoire de travail est propre ou que vous êtes d'accord pour perdre vos modifications non validées.