web-dev-qa-db-fra.com

Erreur avec git rebase ("n'a pas pu s'appliquer ...")

Je suis l'administrateur du référentiel GitHub https://github.com/plison/opendial . Je voudrais réduire le nombre de validations sur le référentiel, car le référentiel a déjà quelques milliers de validations, dont beaucoup sont des modifications de débogage mineures qui pourraient facilement être écrasées ensemble (en particulier celles qui datent de quelques années).

J'essaie donc d'appliquer le rebasage afin d'écraser une partie de mes commits. Cependant, j'ai rencontré le problème suivant:

  1. Quand je tape par exemple git rebase -i HEAD~10, J'obtiens un nombre assez long de lignes de commit (bien plus que 10) dans l'éditeur interactif. Quelle pourrait être la raison?
  2. Plus important encore, une fois que je ferme l'éditeur interactif pour démarrer le rebasage, j'obtiens systématiquement le message d'erreur "erreur: impossible d'appliquer", même lorsque je n'apporte aucune modification aux validations (c'est-à-dire si je laisse toutes les lignes en "sélection", sans aucune modification ou réorganisation).

Comment puis-je résoudre ces problèmes? Il convient de noter que le référentiel a été automatiquement importé d'un référentiel précédent (SVN) hébergé sur Google Code. La conversion semblait jusqu'ici avoir bien fonctionné, mais je me demande pourquoi j'obtiens ces erreurs lorsque j'essaie de rebaser mes commits.

36
Pierre Lison

L'historique de votre projet semble contenir un certain nombre de validations de fusion récemment (probablement vous les avez faites). La présence d'une fusion valide ce que vous souhaitez rebaser de manière interactive provoque généralement des problèmes. (Un rebase interactif suppose à peu près un historique linéaire, mais les validations de fusion ne sont pas linéaires.)

L'historique de votre projet semble également avoir en quelque sorte deux historiques parallèles qui sont fusionnés ensemble dans la validation 11b3653 (utilisez un outil comme gitk ou tig pour voir cela, il n'est pas affiché bien sur l'interface web de Github).

Je vous suggère d'essayer d'abord d'aplatir votre historique pour vous débarrasser des histoires parallèles et de supprimer les commits de fusion. Ensuite, une fois que vous avez un historique strictement linéaire, vous pouvez commencer à réécrire l'historique pour supprimer tous les désabonnements de débogage.

17
Greg Hewgill

Pour me rappeler comment résoudre ce problème:

Le message d'erreur n'est pas très informatif. Si vous tapez

git rebase --continue

vous réalisez que l'erreur est due à un conflit de fusion que git ne peut pas résoudre par lui-même et a besoin de votre aide.

Résolvez les conflits de fusion dans votre éditeur/IDE préféré (indice: cela devrait commencer par i et se terminer par ntelliJ)

Marquer la résolution avec

git add .

Si tous les conflits sont résolus, vous devriez voir quelque chose comme ceci:

(all conflicts fixed: run "git rebase --continue")

Alors continuez votre rebase avec

git rebase --continue

J'espère que votre rebase devrait maintenant réussir

git status

spectacles:

On branch feature/Dig-19302-Upgrade-mockito-v2
Your branch is behind 'Origin/feature/your-feature-branch' by 2 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)

nothing to commit, working directory clean

Ne faites pas de git pull. Si vous le faites, vous n'écraserez que vos conflits de fusion. Poussez plutôt vos résolutions de conflits de fusion vers la branche) avec

git Push --force

Vous avez terminé! Votre journal git ne devrait afficher qu'un seul commit maintenant (qui est la mise à jour forcée que vous venez de faire)

46
Somaiah Kumbera