Question Annuler un 'git push'


Voici ce que j'ai fait sur mon supposé être stable branche...

% 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 tout une erreur comme je l'ai réalisé plus tard. Je voudrais annuler tout ce processus et rétablir la branche alpha-0.3.0 à ce qu'elle était.

Que devrais-je faire?


468
2017-08-13 07:23


origine


Réponses:


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 point de 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 c'est le cas, vous obtiendrez une erreur qui inclut la phrase [remote rejected].

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

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éfinir, alors vous devez avoir un accès 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

747
2017-08-13 07:47



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.


128
2017-11-24 16:48



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 validation.


70
2017-09-03 11:39



La solution acceptée (par @charles bailey) est très dangereuse si vous travaillez dans un repo partagé.

En tant que meilleure pratique, tous les validations transmises à un dépôt distant partagé doivent être considérées 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


31
2018-02-24 02:31



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 avez l'intention de pousser


26
2017-11-12 00:04



Une autre façon de faire ceci:

  1. créer une autre branche
  2. checkout le commit précédent sur cette branche en utilisant "git checkout"
  3. pousser la nouvelle branche.
  4. supprimez l'ancienne branche et appuyez sur la touche git push origin --delete <branch_name>)
  5. renommer la nouvelle branche en ancienne branche
  6. pousser encore.

15
2017-07-25 11:24



git push origin +7f6d03:master

Cela reviendra votre repo au numéro de commit mentionné


7
2018-01-23 07:52



Annuler plusieurs commits git reset --hard 0ad5a7a6 (Il suffit de fournir 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)


6
2018-05-12 06:40



Scénario 1: Si vous voulez annuler le dernier commit disons 8123b7e04b3, voici la commande (ceci a fonctionné pour moi):

git push origin +8123b7e04b3^:<branch_name>

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)

Information additionnelle: Scénario 2: Dans certaines situations, vous pouvez revenir en arrière sur ce que vous venez d'annuler (essentiellement annuler 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


5
2017-12-19 12:02