Défaire un «coup de pouce»

Voici ce que j’ai fait sur ma twig supposée être stable

% git rebase master First, rewinding head to replay your work on top of it... Fast-forwarded alpha-0.3.0 to master. % git status # On branch alpha-0.3.0 # Your branch is ahead of 'origin/alpha-0.3.0' by 53 commits. # nothing to commit (working directory clean) % git push Fetching remote heads... refs/ refs/heads/ refs/tags/ refs/remotes/ 'refs/heads/master': up-to-date updating 'refs/heads/alpha-0.3.0' from cc4b63bebb6e6dd04407f8788938244b78c50285 to 83c9191dea88d146400853af5eb7555f252001b0 done 'refs/heads/unstable': up-to-date Updating remote server info 

C’était une erreur, comme je l’ai compris plus tard. Je voudrais annuler tout ce processus et rétablir la twig alpha-0.3.0.

Que devrais-je faire?

Vous devez vous assurer qu’aucun autre utilisateur de ce référentiel ne récupère les modifications incorrectes ou ne tente de créer des modifications que vous souhaitez supprimer car vous êtes sur le sharepoint revenir en arrière.

Ensuite, vous devez forcer l’ancienne référence.

 git push -f origin last_known_good_commit:branch_name 

ou dans votre cas

 git push -f origin cc4b63bebb6:alpha-0.3.0 

Vous pouvez avoir receive.denyNonFastForwards défini sur le référentiel distant. Si tel est le cas, vous obtiendrez une erreur incluant la phrase [remote rejected] .

Dans ce scénario, vous devrez supprimer et recréer la twig.

 git push origin :alpha-0.3.0 git push origin cc4b63bebb6:refs/heads/alpha-0.3.0 

Si cela ne fonctionne pas – peut-être parce que vous avez receive.denyDeletes défini, alors vous devez avoir un access direct au référentiel. Dans le référentiel distant, vous devez alors faire quelque chose comme la commande de plomberie suivante.

 git update-ref refs/heads/alpha-0.3.0 cc4b63bebb6 83c9191dea8 

Je crois que vous pouvez aussi faire ceci:

 git checkout alpha-0.3.0 git reset --hard cc4b63bebb6 git push origin +alpha-0.3.0 

Ceci est très similaire à la dernière méthode, sauf que vous n’avez pas à vous déplacer dans le repo distant.

git revert est moins dangereux que certaines des approches suggérées ici:

 prompt> git revert 35f6af6f77f116ef922e3d75bc80a4a466f92650 [master 71738a9] Revert "Issue #482 - Fixed bug." 4 files changed, 30 insertions(+), 42 deletions(-) prompt> git status # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # nothing to commit (working directory clean) prompt> 

Remplacez 35f6af6f77f116ef922e3d75bc80a4a466f92650 par votre propre commit.

La solution acceptée (à partir de @charles bailey) est très dangereuse si vous travaillez dans un repository partagé.

En guise de meilleure pratique, tous les commits envoyés à un référentiel distant partagé doivent être considérés comme «immuables». Utilisez ‘git revert’ à la place: http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#fixing-mistakes

https://git-scm.com/book/be/v2/Git-Basics-Undoing-Things

Une façon de le faire sans perdre les changements que vous vouliez:

 git reset cc4b63b git stash git push -f origin alpha-0.3.0 git stash pop 

Ensuite, vous pouvez choisir les fichiers que vous vouliez pousser

Une autre façon de faire cela:

  1. créer une autre twig
  2. extraire le commit précédent sur cette twig en utilisant “git checkout”
  3. pousser la nouvelle twig.
  4. supprimer l’ancienne twig et pousser la suppression (utilisez git push origin --delete )
  5. renommer la nouvelle twig dans l’ancienne twig
  6. pousser à nouveau.
 git push origin +7f6d03:master 

Cela va retourner votre repo au numéro d’engagement mentionné

Annuler plusieurs commits git reset –hard 0ad5a7a6 (Fournissez simplement le hash commit SHA1)

Annuler la dernière validation

git reset –hard HEAD ~ 1 (les modifications du dernier commit seront supprimées) git reset –soft HEAD ~ 1 (les modifications du dernier commit seront disponibles sous forme de modifications locales non validées)

Scénario 1 : Si vous voulez annuler le dernier commit, dites 8123b7e04b3, ci-dessous la commande (cela a fonctionné pour moi):

 git push origin +8123b7e04b3^: 

La sortie ressemble à celle ci-dessous:

 Total 0 (delta 0), reused 0 (delta 0) To https://testlocation/code.git + 8123b7e...92bc500 8123b7e04b3^ -> master (forced update) 

Informations supplémentaires: Scénario 2 : Dans certaines situations, vous pouvez vouloir revenir à ce que vous venez de défaire (défaire essentiellement l’annulation) via la commande précédente, puis utiliser la commande ci-dessous:

 git reset --hard 8123b7e04b3 

Sortie:

 HEAD is now at cc6206c Comment_that_was_entered_for_commit 

Plus d’infos ici: https://github.com/blog/2019-how-to-undo-almost-anything-with-git

Cela supprimera la dernière validation poussée dans la twig distante (maître ou twig):

 git push origin +HEAD^:master