Пара комментариев:
Во-первых, такой маленький пример никогда не будет объединен:
warning: Cannot merge binary files: afile.txt (HEAD vs. abranch)
тогда, если у вас есть много «маленьких» конфликтов слияния, которые, как вы знаете, должны быть разрешены независимо от контекста, вы можете попробовать сначала переместить свою ветку поверх master
, игнорируя контекст:
git rebase -C0 master
, а затем объедините вашу ветку в master
.
Как правило, - не очень хорошая идея игнорировать весь контекст для перебазирования , но если вы уверены в своих изменениях (как в «модификациях, не требующих контекста вообще») , это будет работать.
из справочной страницы git rebase :
-C<n>
Убедитесь, что по крайней мере <n>
строк окружающего контекста совпадают до и после каждого изменения.
Когда существует меньше строк окружающего контекста, все они должны совпадать.
По умолчанию ни один контекст никогда не игнорируется.
Вы можете протестировать его достаточно легко (здесь, в сеансе PowerShell, с Git1.6.5.1, на Xp)
Сначала создайте утилиту для маленькой летучей мыши 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
затем создайте репо и добавьте файл:
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"
Ваш файл выглядит так:
hello, World 1
hello, World 2
hello, World 3
hello, World 4
hello, World 5
Изменить его в ветке
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"
У вас будет:
hello, World 1
hello, World 2_modified
hello, World 3
hello, World 4
hello, World 5
Затем измените его в мастере
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"
Что дает вам:
hello, World 1_master
hello, World 2
hello, World 3
hello, World 4
hello, World 5
Клон этого репо для первого эксперимента (т. Е. Слияние abranch
в 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
Это дает вам конфликт:
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
Снова клонируйте первый репо, на этот раз для перебазирования первого abranch
поверх master
без контекста:
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
Ваш файл незаметно объединен:
hello, World 1_master
hello, World 2_modified
hello, World 3
hello, World 4
hello, World 5
Конечно, если вы переключитесь обратно на master
и сейчас слияние abranch
, результатом будет слияние ускоренной перемотки вперед.
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(-)