GitHub - comment revenir à l'état précédent

J'utilise GitHub comme dépôt à distance.

j'ai déjà poussé 5 commits vers le serveur et je veux revenir à l'état avant les commits.

si le hachage de propagation est 3425661dba2aadccdbab , Comment puis-je revenir à la propagation locale/à distance? J'ai essayé

$ reset --hard 3425661dba2aadccdbab

mais cela n'a fait que ramener ma tête de travail à cette branche et m'oblige à refaire un git pull . J'ai essayé la caisse, mais ce m'a fait atterrir dans un "isolé" de la branche.

37
demandé sur Sebastian Zartner 2011-08-07 12:54:23

4 réponses

vous avez essentiellement deux options pour inverser les changements:

  1. créer une nouvelle propagation qui applique les changements inversés. C'est l'option préférée car elle ne change pas l'histoire sur un dépôt public
  2. enlever les commits et les pousser de force.

la première option peut être obtenue en utilisant git revert

git-revenir - Rétablir certains s'engage

compte tenu d'une ou plusieurs propagations existantes, revenir sur les modifications que les correctifs connexes introduisent, et enregistrer quelques nouvelles propagations qui les enregistrent.

Un exemple serait git revert -n HEAD~5..HEAD . Cette commande crée 5 nouvelles commits, dont chacune annule une des 5 dernières commits de la branche actuellement cochée.

la deuxième option serait de supprimer les propagations. Notez que cela change histoire référentiel. Donc, quiconque a déjà tiré les changements seront probablement plutôt surpris et les choses peuvent devenir brouillon rapidement. Cela dit, vous pouvez faire

git reset --hard HEAD~5
git push --force

la première commande effacera toute modification non engagée de votre copie de travail actuelle. et réinitialisez votre dépôt local à l'état actuel du HEAD - 5 commits. La deuxième commande forcera la poussée vers la télécommande par défaut (c'est-à-dire GitHub) là - bas, toute modification divergeant de votre dépôt local actuel est écraser.

une nouvelle mise en garde: Si vous ne savez pas vraiment ce que vous faites, n'utilisez pas cette option car elle peut conduire à une perte de données pour vous ou d'autres personnes si elle n'est pas faite correctement. utilisez la première option à la place, car elle supprimera les changements de manière transparente, mais sans les effets secondaires désagréables de la réécriture historique.

59
répondu Holger Just 2017-10-12 16:49:57

Faire un git push -f . Pas une bonne idée si il y a d'autres personnes utilisant le même repo.

3
répondu Chandra Sekar S 2011-08-07 08:59:29

Vous pouvez le faire git revert <commit> à tous les commits qui ont été faites après votre état. (Dans l'ordre inverse pour éviter des conflits.)

c'est une façon propre s'il y a d'autres personnes qui partagent le rapport, mais un petit effort. (Vous pouvez automatiser...?)

2
répondu Sailesh 2011-08-07 09:05:41

faire un checkout git, puis le commit à la branche que vous voulez. Ceci fera un nouveau commit avec l'ancien code (donc vous aurez 6 commits).

git checkout HEAD~3 , où 3 est le nombre de propagations auxquelles vous voulez revenir.

mieux encore, vous pouvez vérifier un seul fichier dans la tête actuelle:

git checkout 3425661dba2aadccdbab:path/to/file/from/base

cela réduira la probabilité de rendre d'autres personnes en colère contre vous proverbiale tapis sous leurs pieds.

EDIT:

il y a une question similaire ici:

Checkout ancien commit et d'en faire un nouveau commit

2
répondu beatgammit 2017-05-23 12:26:04