Discussion:
Problem resolving an octopus merge conflict
Sean
2006-01-11 06:51:11 UTC
Permalink
Hi folks,

After a failed regular merge you can fix up the conflicts by hand and then
do a commit; the proper parents for the merge will be picked up from
MERGE_HEADS. However, after a failed octopus merge this file doesn't
exist even though conflict markers _do_ exist in the appropriate files. A
little test case is given below:

mkdir otest
cd otest

git init-db
echo A > file
git add file
git commit -m "new file"

git checkout -b linus
echo B > file
git commit -a -m "B file"

git checkout -b torvalds master
echo C > file
git commit -a -m "C file"

git checkout master
git pull . linus torvalds

At which point you'll get back:

defaulting to local storage area
Committing initial tree a9e3325a07117aa5381e044a8d96c26eb30d729d
Trying simple merge with 87915efc19fb0a71f88c1da6f7da0e4454f32a68
Trying simple merge with ec835c64be51803fb46f82c97b266cc60a0b04b7
Simple merge did not work, trying automatic merge.
Auto-merging file
merge: warning: conflicts during merge
ERROR: Merge conflict in file
fatal: merge program failed
No merge strategy handled the merge.

The "file" will contain:

<<<<<<< .merge_file_e7oHn1
C
=======
B
.merge_file_6Z4LD0
After fixing this up though, git-commit won't see this as a merge commit
and won't add the proper parent linkages. I'm not sure at this point
what the proper fix should be or if this is just pilot error.

Thanks,
Sean
Junio C Hamano
2006-01-11 08:33:32 UTC
Permalink
Post by Sean
After fixing this up though, git-commit won't see this as a merge commit
and won't add the proper parent linkages. I'm not sure at this point
what the proper fix should be or if this is just pilot error.
Not a pilot error, and we do not make it explicit enough, but
git-merge-octopus has this comment:

echo "Simple merge did not work, trying automatic merge."
git-merge-index -o git-merge-one-file -a ||
exit 2 ; # Automatic merge failed; should not be doing Octopus

If you need to manually fix up such a merge, that is a sure sign
that the branches you merged into an Octopus was not independent
bunches after all. Letting such a commit to be made defeats the
point of an Octopus, which is to bundle independent tracks of
development.

This is more philosophical rather than technical, and may look
being unhelpful to you (who wanted to create an Octopus), but is
done to help people who later needs to deal with such a merge
history.

Loading...