Reputation: 1745
I am trying to simulate the example on three-way merge process in git
given here, Below is the figure provided explaining three-way merge.
To understand this, I have created a file testfile
under my git project directory and made changes as below:
Commit C0
echo 'Commit #0 - master branch' >> testfile
git add testfile
git commit -m 'commit 0'
Commit C1
echo 'Commit #1 - master branch' >> testfile
git commit -a -m 'commit 1'
Commit C2
echo 'Commit #2 - master branch' >> testfile
git commit -a -m 'commit 2'
Commit C3
git checkout -b iss53
echo 'Commit #3 - iss53 branch' >> testfile
git commit -a -m 'commit 3'
Commit C4
git checkout master
echo 'Commit #4 - master branch' >> testfile
git commit -a -m 'commit 4'
Commit C5
git checkout iss53
echo 'Commit #5 - iss53 branch' >> testfile
git commit -a -m 'commit 5'
Now, in order to merge changes from both the branches, as shown in below image, I executed git merge
command.
Merge
$ git checkout master
$ git merge iss53
Merge Result
Auto-merging testfile
CONFLICT (content): Merge conflict in testfile
Automatic merge failed; fix conflicts and then commit the result.
$ cat testfile
Commit #0 - master branch
Commit #1 - master branch
Commit #2 - master branch
<<<<<<< HEAD
Commit #4 - master branch
=======
Commit #3 - iss53 branch
Commit #5 - iss53 branch
>>>>>>> iss53
My questions
testfile
(so that testfile
contains 5 lines from 5 commits)?I have also tried with git rebase
, but merge conflict error is shown.
Upvotes: 2
Views: 2904
Reputation: 38619
If you change the same line on the same file, Git cannot be sure how to properly resolve the conflict. Adding lines at the same spot is the same case.
Change your sequence from
echo 'Commit #0 - master branch' >> testfile
git add testfile
git commit -m 'commit 0'
echo 'Commit #1 - master branch' >> testfile
git commit -a -m 'commit 1'
echo 'Commit #2 - master branch' >> testfile
git commit -a -m 'commit 2'
git checkout -b iss53
echo 'Commit #3 - iss53 branch' >> testfile
git commit -a -m 'commit 3'
git checkout master
echo 'Commit #4 - master branch' >> testfile
git commit -a -m 'commit 4'
git checkout iss53
echo 'Commit #5 - iss53 branch' >> testfile
git commit -a -m 'commit 5'
git checkout master
git merge iss53
to
echo 'Commit #0 - master branch' >> testfile
git add testfile
git commit -m 'commit 0'
echo 'Commit #1 - master branch' >> testfile
git commit -a -m 'commit 1'
echo 'Commit #2 - master branch' >> testfile
git commit -a -m 'commit 2'
git checkout -b iss53
echo 'Commit #3 - iss53 branch' > testfile.new
cat testfile >> testfile.new
mv testfile.new testfile
git commit -a -m 'commit 3'
git checkout master
echo 'Commit #4 - master branch' >> testfile
git commit -a -m 'commit 4'
git checkout iss53
echo 'Commit #5 - iss53 branch' > testfile.new
cat testfile >> testfile.new
mv testfile.new testfile
git commit -a -m 'commit 5'
git checkout master
git merge iss53
and you will get a successfull automatic three-way-merge.
Upvotes: 1