Quelle est la différence entre «git checkout -f» et «git reset –hard HEAD»?

Je dois annuler les modifications locales pour les déploiements. (J’avais utilisé svn revert pour cela dans les anciens jours SVN du skool.)

Et en utilisant git reset --hard HEAD pour cela. (De plus, git fetch et git merge origin/$branch --no-ff pour la synchronisation avec la twig en amont.)

Mais certains articles git checkout -f pour rétablir les changements.

Quelles sont les principales différences entre ces commandes? Quelle est la voie recommandée?

Les deux d’entre eux ont exactement le même effet. Je vous recommande de choisir la solution qui vous convient le mieux.

Mais si, dans ce cas particulier, l’effet est le même, avec des valeurs différentes, ce serait complètement différent. Fondamentalement (il y a plus, voir les rubriques liées) avec une réinitialisation, vous déplacez la twig actuelle et le HEAD vers un commit spécifique, mais avec une extraction, vous déplacez uniquement HEAD. Pour plus de détails, voir ci-dessous.


Ressources:

  • git réinitialiser
  • checkout git

Sur le même sujet:

  • Y a-t-il une différence entre git reset –hard HEAD et git checkout?
  • Y a-t-il une différence entre «git reset –hard hash» et «git checkout hash»?
  • Pouvez-vous m’expliquer git reset en anglais clair?

Ne pas avoir le rep pour commenter les autres réponses encore, je voulais juste append que je suis tombé sur un cas où les deux commandes n’ont pas le même effet. Je suis entré dans un état étrange, donc c’est définitivement un avantage. Voici ce qui s’est passé:

J’étais dans une twig, tout était propre. J’ai vérifié le master git checkout master maître git checkout master et découvert à partir du git status qu’il y avait des changements sur les fichiers existants non mis en scène pour une validation (oui, sur le code que je viens d’extraire). J’ai essayé de ranger pour retourner à un état de propreté, la réserve prétendait être terminée mais le git status était toujours inchangé. Aussi essayé git reset --hard HEAD . Il a également déclaré avoir achevé avec succès mais le statut n’était pas différent. Je n’ai pas pu avorter ces changements étranges.

Cependant, git checkout -f résolu ce problème. J’ai pu sortir de cet étrange état. Donc, à certains égards, les deux ne sont pas les mêmes.