307 votes

Comment réparer un rebase interactif "corrompu" ?

J'ai réussi à créer un petit désordre dans mon dépôt git local. J'essayais de réparer un commit cassé en utilisant la fonction les instructions suivantes . Avant d'exécuter le "git commit --amend" (et après le git rebase --interactive) j'ai décidé que mes changements étaient incorrects et j'ai donc exécuté "git reset HEAD --hard". Pas une bonne idée, je vous le dis.

Maintenant, le rebase interactif semble être "bloqué". Git montre la branche actuelle comme (|REBASE-m). Chaque commande (cd .., ls, git rebase...) dans mon dépôt donne l'erreur suivante :

cat : .git/rebase-merge/head-name : Aucun fichier ou répertoire de ce type

Voici à quoi ressemble git rebase --abort :

$ git rebase --abort
cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/head-name: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/orig-head: No such file or directory
HEAD is now at 4c737fb Revert "Modified file names"
rm: cannot remove `c:/_work/project/src/git/.git/rebase-merge/done': Permission denied
rm: cannot remove directory `c:/_work/project/src/git/.git/rebase-merge': Directory
not empty
cat: .git/rebase-merge/head-name: No such file or directory

Voici le résultat de git rebase --continue :

$ git rebase --continue
cat: c:/_work/project/src/git/.git/rebase-merge/prev_head: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/end: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/msgnum: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/onto: No such file or directory
cat: c:/_work/project/src/git/.git/rebase-merge/quiet: No such file or directory
prev_head must be defined
cat: .git/rebase-merge/head-name: No such file or directory

Avez-vous des idées ? Je voudrais que la situation revienne à l'état dans lequel elle était avant que je ne commence mon opération de rebasement bien pensée.

Voici comment git log --oneline montre la situation :

4c737fb Revert "Modified file names"
247ac02 Modified file names
33141e6 Message modifications
10a4a04 Modified db script

Et c'est bien.

J'utilise msysgit v1.7.0.2.

140 votes

git rebase --quit a fonctionné pour moi

1 votes

@JuanCaicedo Cela m'a aidé à résoudre mon rebasement git corrompu. Je vous remercie

210voto

Martin Owen Points 1829

Il semble que Git ait essayé de supprimer le .git/rebase-merge mais n'a pas réussi à le supprimer complètement. Avez-vous essayé de copier ce dossier ailleurs ? Copiez également le dossier .git/rebase-apply s'il est présent.

7 votes

Merci de l'avoir souligné. J'ai pu résoudre mon problème en redémarrant l'ordinateur. Je ne suis pas sûr de ce qui a mal tourné, car d'une manière ou d'une autre, tous les accès au fichier .git \rebase -Le dossier de fusion a provoqué une erreur "Accès refusé".

25 votes

Le redémarrage n'a pas fonctionné pour moi mais git rebase --abort (de stackoverflow.com/a/4757777/146044 ) hizo travail.

5 votes

Le simple fait de redémarrer le shell git (Windows) a fonctionné pour moi ( git rebase --abort ne fonctionnait pas)

92voto

user584317 Points 211

J'ai eu un problème similaire dû à un processus zombie vim.exe. En le tuant dans le Gestionnaire des tâches, suivi d'un git rebase --abort Je l'ai réparé.

0 votes

C'était aussi mon problème. J'ai utilisé sysinternals handle et a vu qu'un processus (sh.exe) avait le fichier verrouillé. En utilisant pskill <pid> l'a réparé pour moi.

0 votes

J'ai eu le même problème, mais avec Sublime Text pour moi.

0 votes

J'ai essayé git rebase --abort mais j'ai obtenu une erreur error : could not read '.git/rebase-apply/head-name' : No such file or directory ; git rebase --quit a fonctionné.

7voto

J'ai eu le même problème dans Eclipse. Impossible de Rebase=>abandonner à partir d'Eclipse.

Exécuter git rebase --abort de Git Bash a fonctionné pour moi.

0voto

diptia Points 345

Une fois que vous avez terminé de manière satisfaisante le rebasement d'un nombre X de commits, la dernière commande doit être git rebase --continue . Cela termine le processus et quitte le mode rebase.

0voto

user3739537 Points 3

J'ai eu le même problème. J'ai utilisé l'explorateur de processus comme suggéré dans un autre post (je ne suis pas capable de trouver ce post) et j'ai trouvé quel processus avait un verrou sur le fichier et je l'ai tué. Ensuite, j'ai exécuté le --continue ou --abort selon les besoins.

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