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:
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?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.
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.
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)