web-dev-qa-db-fra.com

Git - Comment réparer la rebase interactive "corrompue"?

J'ai réussi à créer un petit désordre dans mon référentiel git local. J'essayais de réparer un commit bloqué en utilisant le instructions suivantes . Avant d'exécuter "git commit --amend" (et après la réplication de git --interactive), j'ai décidé que mes modifications étaient incorrectes et j'ai donc exécuté "git reset HEAD --hard". Ce n'est pas une bonne idée, je vous le dis.

Maintenant, la base interactive semble être "bloquée". Git affiche la branche actuelle sous la forme (| REBASE-m). Chaque commande (cd .., ls, git rebase ...) dans mon référentiel génère 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

Des idées? Je voudrais rétablir la situation telle qu'elle était avant que je commence mon opération de réassurance 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 bon. 

J'utilise msysgit v1.7.0.2.

71
Mikael Koskinen

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

68
Martin Owen

J'ai eu un problème similaire en raison d'un processus zombie vim.exe. Le tuer dans le Gestionnaire des tâches, suivi d'un git rebase --abort, le corrigeait.

83
user584317

Avait le même problème dans Eclipse. Impossible de redistribuer => abandonner Eclipse.

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

7
Praveen Hiremath

Sous Windows, si vous ne souhaitez pas ou ne pouvez pas redémarrer l'ordinateur, voir ci-dessous.

Installez Process Explorer: https://technet.Microsoft.com/en-us/sysinternals/bb896653.aspx

Dans Process Explorer, Rechercher> File Handle ou DLL ...

Tapez le nom de fichier mentionné dans l'erreur (pour mon erreur c'était 'git-rebase-todo' mais dans la question ci-dessus, 'done').

Process Explorer va mettre en évidence le processus qui maintient un verrou sur le fichier (pour moi, c'était 'grep').

Tuez le processus et vous pourrez annuler l'action git de la manière habituelle.

6
Darren Yeats

Créez un fichier avec ce nom:

touch .git/rebase-merge/head-name

et que d'utiliser git rebase 

3
Tehila Dabush

Merci @Laura Slocum pour votre réponse

J'ai tout gâché en rebasant et j'ai eu un HEAD détaché avec un

 error: could not read orig-head

cela m'a empêché de finir le rebasement.

Le détaché HEAD semble contenir exactement le bon état souhaité pour la base, alors j’ai lancé

rebase --quit

et après cela, j'ai vérifié une nouvelle branche temporaire pour la lier à la tête détachée.

En la comparant à la branche que je voulais rebaser, je peux voir que la nouvelle branche temporaire est exactement dans l'état que je voulais atteindre. Merci

3
Ruth

Dans mon cas, eighter git rebase --abort et git rebase --continue lançaient:

erreur: impossible de lire '.git/rebase-apply/head-name': aucun fichier ou répertoire de ce type

J'ai réussi à résoudre ce problème en supprimant manuellement: le répertoire .git\rebase-apply.

2
Dariusz

Dans mon cas, c’était parce que j’avais ouvert le journal SmartGit dans le projet Git respectif et Total Commander dans le répertoire du projet correspondant. Quand j'ai fermé les deux, j'ai pu rebaser sans problème.

Plus j'y pense, plus je soupçonne Total Commander, c.-à-d. Que Windows ait un verrou sur le répertoire ouvert que Git Rebase essayait de résoudre.

Conseil amical: lorsque vous essayez de réparer quelque chose, effectuez toujours les changements les uns après les autres. ;)

1
meridius

Avec Sublime Text 3 sous Windows, le problème est résolu en fermant simplement les fenêtres Sublime utilisées pour l'édition de validation interactive.

1
LeBorgne

Une fois que vous avez terminé de manière satisfaisante la refonte du nombre X de validations, la dernière commande doit être git rebase --continue. Cela termine le processus et sort du mode rebase.

0
diptia

J'utilise git version 2.19.2.windows.1.

la seule chose qui a fonctionné pour moi a été de supprimer le répertoire .git/rebase-apply/ et de créer un git reset --hard.

0
Spongman

J'ai essayé toutes les étapes mentionnées ci-dessus mais rien n'a fonctionné pour moi. Enfin, redémarrage l'ordinateur a fonctionné pour ce problème: D

0
Mohammed Asif

Je me suis retrouvé coincé là-dedans. J'ai créé le fichier de nom de tête, puis une autre erreur s'est produite, indiquant qu'il ne pouvait pas trouver le fichier sur. J'ai donc créé ce fichier. Ensuite, j'ai obtenu une erreur une autre en disant qu'il était impossible de lire '.git/rebase-apply/on': aucun fichier ni répertoire de ce type.

Alors, j’ai consulté la documentation de git documentation pour trouver une nouvelle base et trouvé une autre commande appelée git rebase --quit. Cela me ramena sur ma branche sans changement et je pouvais recommencer ma base, comme neuve.

0
Laura Slocum

J'ai eu le même problème. J'ai utilisé le processus Explorer comme suggéré dans un autre message (je ne parviens pas à trouver ce message) et j'ai découvert quel processus verrouille le fichier et le tue. puis exécutez les commandes --continue ou --avort selon les besoins

0
user3739537

essayé tout le reste sauf un redémarrage, ce qui a fonctionné pour moi est rm -fr .git/REBASE_HEAD

0
Jeremy Vaught

Dans mon cas, après avoir testé toutes ces options et toujours eu des problèmes, j'ai essayé Sudo git rebase --abort et tout a été fait.

0
Dani.Rangelov