Pour une raison quelconque, dernièrement, chaque fois que j'attrape un conflit de fusion, l'exécution de git mergetool
indique "Aucun fichier à fusionner":
$ git pull
First, rewinding head to replay your work on top of it...
Applying: replaced home button with Cancel
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
error: Your local changes to the following files would be overwritten by merge:
Classes/Controllers/HomeController.m
Please, commit your changes or stash them before you can merge.
Aborting
Failed to merge in the changes.
Patch failed at 0002 moved rollback into cancel button in log watching
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".
$ git mergetool
No files need merging
Si je lance git rebase --abort
et que je tire à nouveau, la même chose se produit sur un conflit différent ou bien le tirage réussit sans conflit de fusion. Il n'y a pas de changement à distance entre ces tractions, ce n'est donc pas comme si le conflit avait disparu.
Voici comment cette branche et la télécommande sont configurées:
[branch "develop"]
remote = Origin
merge = refs/heads/develop
rebase = true
[remote "Origin"]
url = <my repo url>
fetch = +refs/heads/*:refs/remotes/Origin/*
Il semble que mon problème concerne les horodatages de fichiers. Grâce à this SO answer suggéré par Mark Longair, le paramètre suivant l’a corrigé pour moi:
git config --global core.trustctime false
Solution triviale
ce qui a fonctionné pour moi: Git crée des fichiers liés à la fusion dans le même répertoire que celui où se trouve le fichier en conflit. Pensez donc à exécuter git mergetool
dans le chemin correct.
Cela a résolu le problème pour moi:git mergetool .
J'ai trouvé ce correctif ici
Solution 1:
$git config --global core.trustctime false
Si false, les différences ctime entre l'index et la copie de travail sont ignorées; utile lorsque le temps de changement d'inode est régulièrement modifié par quelque chose en dehors de Git (robots d'exploration de systèmes de fichiers et certains systèmes de sauvegarde). et core.trustctime sont vrais par défaut.
Solution 2: Juste:
$git rebase --skip
C'est bon pour vous de le sauter
Dans mon cas, le problème était que j'avais une autre fenêtre de console ouverte et que je l'exécutais (sur la base de create-react-app, avec rechargement à chaud) dans cette fenêtre.
Tuer le processus et fermer l'autre fenêtre, puis abandonner la création de base et réessayer a fonctionné pour moi.
Les outils de fusion sont plus efficaces pour résoudre les conflits que les actions ordinaires. Il ne peut pas être trop d'opinion. Par exemple, Beyond Compare est conscient de la syntaxe et fera beaucoup pour vous. Si vous le configurez correctement, vous pouvez simplement compiler et exécuter votre solution à des fins de test. Si tout est bon, alors juste git add -A
et git rebase --continue
. Ce que vous vivez est normal. Vérifiez à nouveau votre paramètre "code de sortie de trust mergetool":
git config --global mergetool.trustExitCode true
Remarque: l'option -A dans git add
mettra en place toutes les modifications, y compris les suppressions et les nouveaux fichiers non suivis.