Couple de commentaires:
d'abord, un petit exemple ne serait jamais fusionné de toute façon:
warning: Cannot merge binary files: afile.txt (HEAD vs. abranch)
alors, si vous avez beaucoup de « petits » conflits de fusion que vous connaissez devrait être résolu indépendamment du contexte, vous pouvez essayer de rebaser d'abord votre branche sur master
, en ignorant le contexte:
git rebase -C0 master
puis de fusionner votre branche en master
.
Ceci est généralement pas une bonne idée d'ignorer tout le contexte pour un rebasage, mais si vous êtes certain vos modifications (comme dans « modifications ne nécessitant pas de contexte du tout »), cela fonctionnera.
De git rebase man page:
-C<n>
Assurez-vous au moins <n>
lignes entourant correspondance de contexte avant et après chaque modification.
Lorsque moins de lignes de contexte environnant existent, elles doivent toutes correspondre.
Par défaut, aucun contexte n'est jamais ignoré.
Vous pouvez tester assez facilement (ici dans une session PowerShell, avec Git1.6.5.1, sur Xp)
d'abord créer une petite chauve-souris utilitaire genfile.bat
echo hello, World %1 > afile.txt
echo hello, World %2 >> afile.txt
echo hello, World 3 >> afile.txt
echo hello, World 4 >> afile.txt
echo hello, World 5 >> afile.txt
puis créez un dépôt et ajoutez un fichier:
PS D:\git\tests\mergeLines> git init m0
PS D:\git\tests\mergeLines> cd m0
PS D:\[...]\m0> D:\git\tests\mergeLines\genfile.bat 1 2
PS D:\[...]\m0> git add -A
PS D:\[...]\m0> git ci -m "afile to be modified concurrently"
Votre fichier ressemble à ceci:
hello, World 1
hello, World 2
hello, World 3
hello, World 4
hello, World 5
Modifier dans une branche
PS D:\[...]\m0> git co -b abranch
PS D:\[...]\m0> D:\git\tests\mergeLines\genfile.bat 1 2_modified
PS D:\[...]\m0> git ci -a -m "afile modified in abranch"
Vous aurez:
hello, World 1
hello, World 2_modified
hello, World 3
hello, World 4
hello, World 5
modifier ensuite dans maître
PS D:\[...]\m0> git co master
PS D:\[...]\m0> D:\git\tests\mergeLines\genfile.bat 1_master 2
PS D:\[...]\m0> git ci -a -m "afile modified in master"
qui vous donne:
hello, World 1_master
hello, World 2
hello, World 3
hello, World 4
hello, World 5
clone qui repo pour une première expérience (ex: une fusion de abranch
en master
)
PS D:\[...]\m0> cd ..
PS D:\git\tests\mergeLines> git clone m0 m1
PS D:\git\tests\mergeLines> cd m1
PS D:\[...]\m1> git co -b abranch origin/abranch
PS D:\[...]\m1> git co master
PS D:\[...]\m1> git merge abranch
Cela vous donne un conflit:
Auto-merging afile.txt
CONFLICT (content): Merge conflict in afile.txt
Automatic merge failed; fix conflicts and then commit the result.
PS D:\[...]\m1> type afile.txt
<<<<<<< HEAD
hello, World 1_master
hello, World 2
=======
hello, World 1
hello, World 2_modified
>>>>>>> abranch
hello, World 3
hello, World 4
hello, World 5
Clone le premier nouveau repo, cette fois pour rebaser d'abord abranch
sur master
, sans contexte:
PS D:\[...]\m1> cd ..
PS D:\git\tests\mergeLines> git clone m0 m2
PS D:\git\tests\mergeLines> cd m2
PS D:\[...]\m2> git co -b abranch origin/abranch
PS D:\[...]\m2> git rebase -C0 master
Votre fichier est fusionné en silence:
hello, World 1_master
hello, World 2_modified
hello, World 3
hello, World 4
hello, World 5
Bien sûr, si vous revenez à master
et maintenant fusionner abranch
, le résultat sera une fusion avance rapide.
PS D:\git\tests\mergeLines\m2> git co master
Switched to branch 'master'
PS D:\git\tests\mergeLines\m2> git merge abranch
Updating c8f48b4..8bee1d2
Fast forward
afile.txt | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
> Suggérez-vous que cela fonctionnerait correctement avec plus de lignes? Oui, il devrait le faire, si nous parlons de lignes * modifiées *, pas de nouvelles lignes ou de lignes supprimées (ce qui déplacerait le nombre de lignes, et ferait de l'absence de contexte un moyen sûr d'avoir un conflit à chaque fois). – VonC
> Par ailleurs, j'ai essayé de rebaser -> même conflit. Si vous avez ajouté le paramètre '-C0' et que vous avez toujours un conflit, cela signifie que certaines lignes se chevauchent, que de nouvelles lignes ou des lignes supprimées existent en tant que différence. '-C0' ne fonctionne que si les mêmes lignes sont présentes, à l'exception de quelques unes (différentes dans chaque version) modifiées. – VonC