131 votes

J'ai oublié "git rebase --continue" et fait "git commit". Comment réparer ?

J'étais en train de refaire du code dans git, j'ai eu quelques conflits de fusion. J'ai résolu les conflits et j'ai fait :

git add

A ce stade, j'ai oublié de le faire :

git rebase --continue

J'ai continué à coder et je l'ai fait :

git commit

pour les changements. Maintenant je suis sur "no branch" et ne peut pas le faire :

git rebase --continue 

Comment puis-je réparer cela ?

247voto

kirikaza Points 399

Fais-le. git reset --soft HEAD^ . Il déplace le pointeur HEAD vers son parent mais conserve l'arbre de travail et ajoute la modification de fusion à l'index. Vous pouvez donc continuer à fusionner avec git rebase --continue comme avant.

9voto

MatrixFrog Points 11066

EDIT : Regardez aussi la réponse ci-dessous pour voir si c'est une solution plus facile pour vous. https://stackoverflow.com/a/12163247/493106


Je dois l'essayer, mais je pense que c'est ce que je ferais :

  1. Marquez votre dernier commit (ou notez simplement son SHA1 quelque part pour ne pas le perdre) : git tag temp
  2. git rebase --abort
  3. Refaites la base à nouveau. Vous devrez résoudre la fusion à nouveau :(
  4. git rebase --continue
  5. git cherry-pick temp

Le problème avec ceci est que votre temp commit contient probablement à la fois la résolution de la fusion, et le nouveau code. Donc, cela pourrait être délicat mais je l'essaierais et verrais si cela fonctionne.

0voto

Louis Durand Points 163

J'ai eu le même problème, et pour aggraver les choses, j'ai rebasé trois commits, et après avoir résolu les conflits sur le deuxième commit, j'ai "commis" au lieu de "rebase --continue".

En conséquence, j'ai eu ceci git reflog

Quand j'ai appliqué la solution de kirikaza, j'ai juste reverté le troisième commit, et pas le deuxième, ce qui était problématique

Comme vous pouvez le voir, le rebasement commence par un checkout depuis la branche remotes/origin/master et applique ensuite mes trois commits qui apparaissent comme les trois opérations précédentes (avant le checkout) dans le reflog.

Ensuite, si vous voulez redémarrer à partir d'une base propre, avant le rebasement, vous pouvez simplement réinitialiser hard au hachage juste avant le checkout de l'opération de rebasement. Dans mon cas (voir l'image) :

git reset --hard 859ed3c

Ensuite, vous pouvez commencer un nouveau git rebase .

0voto

remnant Points 11

J'avais git rebased, corrigé les conflits, git a ajouté le fichier avec les conflits, et (par erreur) commis.

J'ai essayé le git reset --soft HEAD^ y git reset --hard solutions données, mais aucune n'a fonctionné pour moi.

Cependant, juste git rebase --abort a fonctionné : il m'a ramené avant le début du rebasement avec un arbre de travail propre.

Prograide.com

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.

Powered by:

X