いくつかのコメント:
まず、このような小さな例はとにかくマージされません:
警告: バイナリ ファイルをマージできません: afile.txt (HEAD と abranch)
次に、コンテキストとは無関係に解決する必要があることがわかっている「小さな」マージ競合が多数ある場合は、コンテキストをmaster
無視して、最初にブランチを の上にリベースしてみてください。
git rebase -C0 マスター
次に、ブランチを にマージしますmaster
。
これは一般に、 rebase のすべてのコンテキストを無視することはお勧めできませんが、変更について確信がある場合(「コンテキストをまったく必要としない変更」など) は機能します。
git rebase の man ページから:
-C<n>
<n>
各変更の前後で、少なくとも周囲のコンテキストの行が一致していることを確認してください。
周囲のコンテキストの行が少ない場合、それらはすべて一致する必要があります。
デフォルトでは、コンテキストは無視されません。
簡単にテストできます (ここでは PowerShell セッションで、Xp で Git1.6.5.1 を使用)。
最初に小さなバットユーティリティを作成します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
もちろん、元に戻してmergeにする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(-)