Comment supprimer de manière permanente quelques commits de la twig distante

Je sais que c’est la réécriture de l’histoire qui est mauvaise yada yada.

Mais comment supprimer définitivement quelques commits de la twig distante?

Vous ” git reset ” votre twig locale et vous git push --force votre twig locale révisée sur la télécommande. ( autre solution ici : supprimer la twig distante et la repousser)

Cette réponse SO illustre le danger d’une telle commande, en particulier si les utilisateurs dépendent de l’historique distant pour leurs propres repos.
Vous devez être prêt à signaler les personnes à la section RECOVERING FROM UPSTREAM REBASE de la page de git rebase .

Important: Assurez-vous de spécifier quelles twigs sur “git push -f” ou vous pouvez modifier par inadvertance d’autres twigs! [*]

Ce tutoriel propose trois options. En cas de rupture du lien, je laisserai les étapes principales ici.

  1. Rétablir le plein engagement
  2. Supprimer le dernier commit
  3. Supprimer le commit d’une liste

1 Annule le plein engagement

 git revert dd61ab23 

2 Supprimer le dernier commit

 git push <> +dd61ab23^:<> 

ou, si la succursale est disponible localement

 git reset HEAD^ --hard git push <> -f 

où + dd61 … est votre hachage de validation et git interprète x ^ comme parent de x, et + comme une impulsion forcée non rapide.

3 Supprimer le commit dans une liste

 git rebase -i dd61ab23^ 

Cela ouvrira et l’éditeur affichera une liste de tous les commits. Supprimez celui que vous souhaitez supprimer. Terminer le rebase et pousser la force pour repo.

 git rebase --continue git push   -f 

Notez juste pour utiliser le last_working_commit_id , lors de la last_working_commit_id un commit qui ne fonctionne pas

 git reset --hard  

Nous ne devons donc pas réinitialiser le commit_id que nous ne voulons pas.

Alors bien sûr, il faut pousser à la twig distante:

 git push --force 

C’est peut-être trop tard, mais ce qui m’a aidé, c’est la «solution nucléaire» qui sonne bien. En utilisant essentiellement la filter-branch commandes filter-branch vous pouvez supprimer des fichiers ou modifier quelque chose sur une grande quantité de fichiers tout au long de votre historique GIT.

C’est mieux expliqué ici .

Simplification de la réponse de pctroll, également basée sur cet article de blog .

 # look up the commit id in git log or on github, eg 42480f3, then do git checkout master git checkout your_branch git revert 42480f3 # a text editor will open, close it with ctrl+x (editor dependent) git push origin your_branch # or replace origin with your remote 

Parfois, le moyen le plus simple de résoudre ce problème consiste à créer une nouvelle twig depuis l’endroit où vous connaissez le code. Ensuite, vous pouvez laisser l’historique de la twig errant seul au cas où vous en auriez besoin plus tard. Cela garantit également que vous n’avez perdu aucun historique de validation.

De votre succursale locale:

 git log 

copier le hachage de validation que vous voulez que la twig soit à et quitter le journal de git

 git checkout theHashYouJustCopied git checkout -b your_new_awesome_branch 

Maintenant, vous avez une nouvelle twig comme vous le souhaitez.

Si vous avez également besoin de conserver un commit spécifique à partir de la twig errante qui ne se trouve pas sur votre nouvelle twig, vous pouvez simplement sélectionner ce commit spécifique:

 git checkout the_errant_branch git log 

Copiez le hachage de validation de celui que vous avez besoin de mettre dans la bonne twig et quittez le journal git.

 git checkout your_new_awesome_branch git cherry-pick theHashYouJustCopied 

Pat vous-même sur le dos.

  git reset --soft commit_id git stash save "message" git reset --hard commit_id git stash apply stash stash@{0} git push --force