895 votes

Quelle est la différence entre git reset --mixed, --soft, et --hard?

Je suis à la recherche d'un split engager et ne savez pas quelle option de réinitialisation à utiliser.

Je regardais la page qui est promis à un titre, mais j'ai réalisé que je ne comprends pas vraiment ce que le git de l'indice ou de la zone de transit est et donc les explications n'ont pas les aider.

Aussi les cas d'utilisation mixte --et --soft regarder la même chose à me répondre (si vous souhaitez corriger et de s'engager de nouveau.) Quelqu'un peut-il briser encore plus? Je me rends compte --mixte est probablement l'option pour aller avec, mais je veux savoir pourquoi. Enfin, qu'en est --dur?

Quelqu'un peut-il me donner un exemple de flux de travail de la façon dont la sélection de trois options se passerait-il?

1734voto

mkarasek Points 3149

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)

HEADpoints 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X