Quelle est la signification de git reset --hard origin / master?

224

J'ai fait un git pullet j'ai eu une erreur:

Les fichiers d'arborescence de travail suivants seraient remplacés par la fusion ... Veuillez les déplacer ou les supprimer avant de pouvoir fusionner.

Pour résoudre ce problème, j'ai fait ce qui suit:

git fetch
git reset --hard origin/master

Maintenant, quand je le fais git pull, tout est à jour. Je veux savoir ce qui se passe exactement lorsque j'exécute ces commandes. Je sais git fetchrécupérer les modifications du référentiel distant sans les fusionner dans mon référentiel local.

Quelle est la signification de git reset --hard origin/master? Comment ça marche?

Raza
la source

Réponses:

414
git reset --hard origin/master

dit: jetez tous mes changements échelonnés et non échelonnés, oubliez tout sur ma branche locale actuelle et faites exactement la même chose que origin/master.

Vous vouliez probablement poser cette question avant d'exécuter la commande. La nature destructrice est suggérée en utilisant les mêmes mots que dans "réinitialisation matérielle".

CB Bailey
la source
9
Vous pouvez annuler ce mouvement en utilisant git reset --hard HEAD@{1}. HEAD@{1}varie d'une situation à l'autre, il est donc conseillé de le rechercher dans git reflog.
Nils Werner
2
Notez que la méthode @ NilsWerner pour annuler le déplacement ne restaure pas les modifications échelonnées et non échelonnées. Celles-ci ont disparu pour de bon.
Michael Anderson
3
Les fichiers intermédiaires peuvent toujours être trouvés avec git fsck --lost-found, mais ils ne seront pas attachés à leur chemin de fichier d'origine et peuvent être difficiles à trier.
CB Bailey
1
Il est souvent utile de réinitialiser votre branche principale locale sur origine / maître lorsque vous avez (peut-être accidentellement) validé des modifications sur votre maître local au lieu d'une branche locale. Créez simplement une branche locale pour vos derniers validations, puis réinitialisez votre maître local sur origin / master. Vous pouvez ensuite fusionner ou rebaser votre branche à partir du maître selon vos besoins.
Mike Hopper
2
lol "laissé entendre" est un excellent moyen de décrire cela, car il est loin d'être évident ou explicite
Ben Sandeen