269 votes

La restauration locale et à distance dépôt git par 1 commit

J'ai lu des postes similaires sur ce sujet, et ne peux pas pour la vie de me comprendre comment le faire correctement.

J'ai vérifié dans environ 1000 fichiers que je ne veux pas, et je préfère ne pas avoir à passer par 1by1 et tous les supprimer à partir de la prise en pension.

  • J'ai une télécommande master de la Branche.
  • J'ai le local master de la Branche.

Ils sont tous les deux à la même révision.

Je veux reprendre ma télécommande par 1 commit.

Dire que mon histoire sur master est A--B--C--D--E.
Je veux reprendre mon local d' D.
Puis le pousser à distance donc, mon actuel de hachage sera D à la fois locaux et distants.

Je vais avoir des problèmes en faisant cela.
J'utilise Git Tour, mais je suis à l'aise avec la ligne de commande. Toute aide?

Mise à JOUR: Les grands commentaires ci-dessous. À l'aide d'un reset semble être partiellement découragé, surtout si le référentiel est partagée avec d'autres utilisateurs. Quel est le meilleur moyen d'annuler la précédente livraison de modifications sans l'aide d'un hard reset? Est-il possible?

432voto

VonC Points 414372

Si personne n'a tiré de votre télécommande repo encore, vous pouvez modifier votre CHEF de la direction générale et de la force de pousser à dit à distance repo:

git reset --hard HEAD^ 
git push -f 

(ou, si vous avez un accès direct à la distance repo, vous pouvez modifier sa TÊTE de référence, même si il est un nu repo)


Que faire si quelqu'un a déjà tiré le repo? Que ferais-je alors?

Alors je suggère que quelque chose ne va pas réécrire l'histoire:

  • git revert localement votre dernier commit (en créant un nouveau commit qui inverse ce que le précédent commit n')
  • poussez la "version" générée par git revert.

79voto

eckes Points 17277

Définir la branche locale d'une révision de retour (HEAD^ signifie une révision du dos):

git reset --hard HEAD^

Pousser les modifications d'origine:

git push --force

Vous aurez à force de pousser parce que sinon git reconnaître que vous êtes derrière origin par un commit et rien ne va changer.

De le faire avec des --force indique à git d'écraser la TÊTE dans le repo distant sans le respect de tout progrès.

21voto

Hudson Points 176

Si vous voulez revenir le dernier commit écouter:

Étape 1:

Vérifiez votre local s'engage avec les messages

$ git log

Étape 2:

Supprimer le dernier commit sans réinitialiser les modifications à partir de la succursale locale (ou master)

$ git reset HEAD^

Si vous ne voulez pas le dernier commit des fichiers et des mises à jour à l'écoute

$ git reset HEAD^ --hard

Étape 3:

Nous pouvons mettre à jour les fichiers et les codes, et de nouveau besoin de pousser avec force, il va supprimer la précédente livraison. Il gardera nouveau commit.

$ git push origin branch -f

Ça y est!

4voto

Anvesh Yalamarthy Points 571

Pour les Machines Windows, utilisez:

git reset HEAD~1  #Remove Commit Locally

0voto

Hazok Points 825

Si vous avez un accès direct à la distance repo, vous pouvez toujours utiliser:

git reset --soft HEAD^

Cela fonctionne depuis il n'y a pas de tentative de modification de l'inexistant répertoire de travail. Pour plus de détails, veuillez voir l'original de la réplique:

Comment puis-je uncommit le dernier commit sur un git dépôt nu?

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