Voici ce que j'ai fait sur ma branche supposée 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 m'en suis rendu compte 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?
Réponses:
Vous devez vous assurer qu'aucun autre utilisateur de ce référentiel ne récupère les modifications incorrectes ou n'essaie de construire au-dessus des validations que vous souhaitez supprimer car vous êtes sur le point de rembobiner l'historique.
Ensuite, vous devez «forcer» à pousser l'ancienne référence.
ou dans votre cas
Vous avez peut-être
receive.denyNonFastForwards
défini le référentiel distant. Si tel est le cas, vous obtiendrez une erreur qui comprend la phrase[remote rejected]
.Dans ce scénario, vous devrez supprimer et recréer la branche.
Si cela ne fonctionne pas - peut-être parce que vous avez
receive.denyDeletes
défini, 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.la source
git push -f origin last_known_good_commit:branch_name
Je pense que vous pouvez aussi faire ceci:
Ceci est très similaire à la dernière méthode, sauf que vous n'avez pas à fouiner dans le référentiel distant.
la source
--hard
paramètre " ") devrait être l'ID de la validation à laquelle vous souhaitez réinitialiser votre branche.git reset --hard [commit_id]
pour ne pas déranger le continuum espace-temps.+
force la poussée à avoir lieu, de la même manière que-f
(mais légèrement différente: stackoverflow.com/a/25937833/1757149 ). Sans elle, si vous essayezgit push origin alpha-0.3.0
la poussée échouera:Updates were rejected because the tip of your current branch is behind
.git revert
est moins dangereux que certaines des approches suggérées ici:Remplacez 35f6af6f77f116ef922e3d75bc80a4a466f92650 par votre propre commit.
la source
La solution acceptée (de @charles bailey) est très dangereuse si vous travaillez dans un repo partagé.
En tant que meilleure pratique, tous les commits poussés vers un référentiel distant partagé devraient être considérés comme «immuables». Utilisez plutôt 'git revert': 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
la source
Une façon de le faire sans perdre les changements que vous vouliez:
Ensuite, vous pouvez choisir les fichiers que vous vouliez pousser
la source
Une autre façon de procéder:
git push origin --delete <branch_name>
)la source
Cela ramènera votre repo au numéro de commit mentionné
la source
Annuler plusieurs validations git reset --hard 0ad5a7a6 (Fournissez simplement un hash SHA1 de validation)
Annuler le dernier commit
git reset --hard HEAD ~ 1 (les modifications apportées au dernier commit seront supprimées) git reset --soft HEAD ~ 1 (les modifications apportées au dernier commit seront disponibles sous forme de modifications locales non validées)
la source
Scénario 1 : Si vous souhaitez annuler le dernier commit, par exemple 8123b7e04b3, voici la commande (cela a fonctionné pour moi):
La sortie ressemble à ci-dessous:
Informations supplémentaires: Scénario 2 : Dans certaines situations, vous souhaiterez peut-être revenir en arrière sur ce que vous venez d'annuler (essentiellement annuler l'annulation) via la commande précédente, puis utilisez la commande ci-dessous:
Production:
Plus d'informations ici: https://github.com/blog/2019-how-to-undo-almost-anything-with-git
la source
Les réponses existantes sont bonnes et correctes, mais que se passe-t-il si vous devez annuler la
push
mais:Utilisez cette commande pour rétablir la modification sur la référence:
la source
Si vous voulez ignorer le dernier commit que vous venez de pousser dans la branche distante: cela ne supprimera pas le commit mais simplement l'ignorera en déplaçant le pointeur git vers le commit plus tôt, référencé par HEAD ^ ou HEAD ^ 1
Mais si vous avez déjà poussé ce commit et que d'autres ont tiré la branche. Dans ce cas, la réécriture de l'historique de votre branche n'est pas souhaitable et vous devriez plutôt annuler ce commit:
la source