web-dev-qa-db-fra.com

Quelle est la différence entre 'git reset - hard HEAD ~ 1' et 'git reset --soft HEAD ~ 1'?

J'ai essayé de défaire mon commit en git. Est-ce dangereux d'utiliser git reset --hard HEAD~1?

Quelle est la différence entre différentes options pour git reset?

Y at-il également un autre moyen d'annuler un commit de Sourcetree Gui?

19
mesutali

Ceci est un article utile qui montre graphiquement l'explication de la commande reset.

http://git-scm.com/blog/2011/07/11/reset.html

Réinitialiser - hard peut être assez dangereux car il écrase votre copie de travail sans vérification. Par conséquent, si vous n'avez pas validé le fichier, il est parti. 

En ce qui concerne l'arbre source, il n'y a aucun moyen, à ma connaissance, d'annuler les commits. Il serait très probablement utiliser réinitialiser sous les couvertures de toute façon

4
FamiliarPie

Git reset a 5 modes principaux: doux, mixte, fusionné, dur, garder . La différence entre eux est de changer ou de ne pas changer head, stage (index), répertoire de travail

Git reset --hard changera la tête, l'index et le répertoire de travail.
Git reset --soft changera de tête uniquement. Aucun changement d'index, répertoire de travail. 

En d'autres termes, si vous souhaitez annuler votre commit, --soft devrait suffire. Mais après cela, vous avez toujours les modifications de mauvais commit dans votre index et votre répertoire de travail. Vous pouvez modifier les fichiers, les corriger, les ajouter à l'index et les valider à nouveau. 

Avec le --hard, vous obtenez une table rase dans votre projet. Comme s'il n'y avait pas eu de changement depuis le dernier commit. Si vous êtes sûr que c'est ce que vous voulez, avancez. Mais une fois que vous faites cela, vous perdrez complètement votre dernier commit. (Remarque: il existe encore des moyens de récupérer le commit perdu). 

2
apadana

C'est la principale différence entre utiliser git reset --hard et git reset --soft:

--soft

Ne touche pas du tout le fichier d'index ou l'arbre de travail (mais réinitialise la tête à, comme le font tous les modes). Cela laisse tous vos fichiers modifiés "Les modifications à valider", comme le dirait le statut de git.

--hard

Réinitialise l'index et l'arbre de travail. Toutes les modifications apportées aux fichiers suivis dans l’arbre de travail depuis sont supprimées.

0
Alexandr