J'ai forké un repo github et travaillé sur mon repo github.
J'ai fait des pull-requests et c'était terminé.
Après cela, l'amont a eu d'autres commits alors maintenant je veux rebaser, je suppose que c'est ce que je dois faire.
Mais j'obtiens ces conflits de fusion:
First, rewinding head to replay your work on top of it...
Applying: Issue 135 homepage refresh
Using index info to reconstruct a base tree...
<stdin>:17: trailing whitespace.
%h4
warning: 1 line adds whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging app/views/layouts/application.html.haml
CONFLICT (content): Merge conflict in app/views/layouts/application.html.haml
Auto-merging app/views/home/index.html.haml
CONFLICT (content): Merge conflict in app/views/home/index.html.haml
Auto-merging app/views/home/_group_projects.html.haml
CONFLICT (content): Merge conflict in app/views/home/_group_projects.html.haml
Failed to merge in the changes.
Patch failed at 0001 Issue 135 homepage refresh
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".
Je ne sais pas comment résoudre ces problèmes, veuillez aider.
git
github
git-rebase
Pahnin
la source
la source
Réponses:
Rebasing peut être un vrai casse-tête. Vous devez résoudre les conflits de fusion et continuer le rebasage. Par exemple, vous pouvez utiliser l'outil de fusion (qui diffère selon vos paramètres)
Ensuite, ajoutez vos modifications et continuez
Bonne chance
la source
En cas de conflit lors du rebase, vous avez trois options:
Vous pouvez exécuter
git rebase --abort
pour annuler complètement le rebase. Git vous ramènera à l'état de votre branche tel qu'il était avant l'appel de git rebase.Vous pouvez exécuter
git rebase --skip
pour ignorer complètement le commit. Cela signifie qu'aucune des modifications introduites par le commit problématique ne sera incluse. Il est très rare que vous choisissiez cette option.Vous pouvez résoudre le conflit comme l'a dit iltempo. Lorsque vous avez terminé, vous devrez appeler
git rebase --continue
. Mon outil de fusion est kdiff3 mais il y en a beaucoup d'autres que vous pouvez utiliser pour résoudre les conflits. Il vous suffit de définir votre outil de fusion dans les paramètres de git afin qu'il puisse être appelé lorsque vous appelezgit mergetool
https://git-scm.com/docs/git-mergetoolSi aucune des solutions ci-dessus ne vous convient, allez vous promener et réessayez :)
la source
<<<<<
Si vous avez beaucoup de commits à rebaser, et que certains d'entre eux donnent des conflits, cela fait vraiment mal. Mais je peux suggérer une approche moins connue pour «écraser tous les conflits».
Tout d'abord, vérifiez la branche temporaire et lancez la fusion standard
Vous devrez résoudre les conflits, mais une seule fois et seulement les vrais. Ensuite, organisez tous les fichiers et terminez la fusion.
Revenez ensuite à votre branche (que ce soit alpha ) et lancez le rebase, mais avec la résolution automatique des conflits.
La branche a été rebasée, mais le projet est probablement dans un état non valide. C'est OK, nous avons une dernière étape. Nous avons juste besoin de restaurer l'état du projet, donc il sera exact comme sur la branche «temp». Techniquement, nous avons juste besoin de copier son arborescence (état du dossier) via la commande de bas niveau git commit-tree . De plus, la fusion dans la branche actuelle vient de créer un commit.
Et supprimer la branche temporaire
C'est tout. Nous avons fait un rebase via une fusion masquée.
J'ai également écrit un script, pour que cela puisse être fait de manière dialogique, vous pouvez le trouver ici .
la source
Remarque: avec Git 2.14.x / 2.15 (T3 2017), le
git rebase
message en cas de conflit sera plus clair.Voir commit 5fdacc1 (16 juillet 2017) par William Duclot (
williamdclt
) .(Fusionné par Junio C Hamano -
gitster
- in commit 076eeec , 11 août 2017)Avant:
Après:
la source