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
.
Ce tutoriel propose trois options. En cas de rupture du lien, je laisserai les étapes principales ici.
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