J'ai acheté un github repo et travaillé sur mon github repo.
J'ai fait une demande de tirage et le travail a été complété.
Après cela, l’amont a eu quelques autres commits, alors je veux maintenant rebaser, je suppose que c’est ce que je dois faire.
Mais je reçois 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 les réparer, aidez-moi s'il vous plaît.
Rebasing peut être un vrai mal de tête. Vous devez résoudre les conflits de fusion et continuer à changer de base. Par exemple, vous pouvez utiliser l'outil de fusion (qui varie en fonction de vos paramètres)
git mergetool
Puis ajoutez et validez vos modifications et continuez
git rebase --continue
Bonne chance
Lorsque vous êtes en conflit pendant la création d’une base, vous avez trois options:
Tu peux courir git rebase --abort
pour annuler complètement la rebase. Git vous ramènera à l'état de votre branche tel qu'il était avant l'appel de git rebase.
Tu peux courir git rebase --skip
pour ignorer complètement le commit. Cela signifie qu'aucun des changements introduits par la validation problématique ne sera inclus. 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 des conflits. Il vous suffit de définir votre outil de fusion dans les paramètres de git pour pouvoir l'invoquer lorsque vous appelez git mergetool
https://git-scm.com/docs/git-mergetool
Si rien de ce qui précède ne fonctionne pour vous, allez vous promener et essayez à nouveau :)
Remarque: avec Git 2.14.x/2.15 (T3 2017), le git rebase
message en cas de conflits sera plus clair.
Voir commit 5fdacc1 (16 juil. 2017) par William Duclot (williamdclt
) .
(Fusion par Junio C Hamano - gitster
- dans commit 076eeec , 11 août 2017)
rebase
: clarifie le message de résolution pour les utilisateurs inexpérimentés
Avant:
When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort"
Après:
Resolve all conflicts manually,
mark them as resolved with git add/rm <conflicted_files>
then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".')
L’interface utilisateur de git peut être améliorée en adressant les messages d’erreur à ceux qu’ils aident: utilisateurs git inexpérimentés et occasionnels.
Pour ce faire, il est utile de s’assurer que les termes utilisés dans ces messages peuvent être compris par ce segment d’utilisateurs et qu’ils les guident dans la résolution du problème.En particulier, l’impossibilité d’appliquer un correctif lors d’un rebase git est un problème courant qui peut être très déstabilisant pour un utilisateur inexpérimenté.
Il est important de les guider vers la résolution du conflit (qui est un processus en 3 étapes, donc complexe) et de les rassurer sur le fait qu’ils peuvent échapper à une situation qu’ils ne peuvent pas gérer avec "--abort
".
Ce commit répond à ces deux points en détaillant le processus de résolution et en évitant les cryptes git linguo.
Si vous avez beaucoup d'engagement à rebaser, et qu'une partie d'entre eux donne des conflits, ça fait vraiment mal. Mais je peux suggérer une approche moins connue comment "écraser tous les conflits".
Commencez par consulter la branche temporaire et démarrez la fusion standard
git checkout -b temp
git merge Origin/master
Vous devrez résoudre les conflits, mais seulement une fois et uniquement les vrais. Puis mettez en scène tous les fichiers et terminez la fusion.
git commit -m "Merge branch 'Origin/master' into 'temp'"
Revenez ensuite dans votre branche (qu’il soit alpha ) et lancez la modification de la base, mais en résolvant automatiquement les conflits éventuels.
git checkout alpha
git rebase Origin/master -X theirs
Branch a été rebasé, mais le projet est probablement dans un état non valide. C'est bon, nous avons une dernière étape. Nous avons juste besoin de restaurer l'état du projet, donc ce sera exactement comme sur la branche 'temp'. Techniquement, nous avons juste besoin de copier son arbre (é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.
git merge --ff $(git commit-tree temp^{tree} -m "Fix after rebase" -p HEAD)
Et supprimer une branche temporaire
git branch -D temp
C'est tout. Nous avons fait un rebase via une fusion cachée.
Aussi j’ai écrit un script, pour que cela puisse se faire de manière dialoguée, vous pouvez le trouver ici .