Je me suis accidentellement engagé dans la mauvaise branche. Comment puis-je supprimer ce commit ?
S'assurer que HEAD pointe vers la branche (vérifier d'abord)
Je me suis accidentellement engagé dans la mauvaise branche. Comment puis-je supprimer ce commit ?
Et assurez-vous que HEAD~1 est le commit... Vous pouvez aussi faire git reset --hard origin
Pensée git remote
liste l'origine pour moi, git reset --hard origin
dit fatal: ambiguous argument 'origin': unknown revision or path not in the working tree.
. Pourquoi ?
Je me demande pourquoi la meilleure réponse que j'ai trouvée se trouve uniquement dans les commentaires ! ( par Daenyth avec 86 votes up )
git reset --hard origin
Cette commande synchronisera le dépôt local avec le dépôt distant en se débarrassant de toutes les modifications que vous avez faites sur votre dépôt local. Vous pouvez également faire ce qui suit pour récupérer la branche exacte que vous avez dans l'origine comme Cleary l'a suggéré dans les commentaires.
git reset --hard origin/<branch>
Ne le supprimez pas : pour un seul engagement git cherry-pick
est suffisant.
Mais si vous aviez plusieurs commits sur la mauvaise branche, c'est là que les git rebase --onto
brille :
Supposons que vous ayez ceci :
x--x--x--x <-- master
\
-y--y--m--m <- y branch, with commits which should have been on master
alors vous pouvez marquer master
et le déplacer là où vous voudriez être :
git checkout master
git branch tmp
git checkout y
git branch -f master
x--x--x--x <-- tmp
\
-y--y--m--m <- y branch, master branch
pour remettre la branche y où elle aurait dû être :
git checkout y
git reset --hard HEAD~2 # ~1 in your case,
# or ~n, n = number of commits to cancel
x--x--x--x <-- tmp
\
-y--y--m--m <- master branch
^
|
-- y branch
et enfin déplacer vos commits (les réappliquer, en faisant réellement de nouveaux commits).
git rebase --onto tmp y master
git branch -D tmp
x--x--x--x--m'--m' <-- master
\
-y--y <- y branch
D'après mon expérience, cela n'annule pas le commit de la branche d'origine, ce qui rend nécessaire l'utilisation de la fonction git reset --hard HEAD~1
après. Je pense qu'utiliser reset --soft
alors changer de branche et valider à nouveau aurait évité un travail supplémentaire. De nouveau, j'utilisais SourceTree pour faire la plupart de mes tâches de base, et je n'ai utilisé la ligne de commande qu'après mon erreur.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.