У меня есть (большое) дерево фиксации, которое содержит несколько коммитов слияния, которые я хочу переустановить для другого коммита. Выполнение нормальной перезагрузки вызывает git, чтобы я разрешил конфликты слияния. Я не хотел пересматривать каждое слияние, потому что это было бы большой работой. Узнав о опции -preserve-merges, которая подробно объясняется здесь, я думал, что нашел идеальный инструмент для этой задачи. Однако я не могу заставить его работать правильно. Я создал игрушечный пример, демонстрирующий проблему.
Начиная с пустой папки, мы сначала создаем ветку с объединением и другую ветвь, на которой мы будем переустанавливать.
A---B--
\ \
---C---D
\
---E
Если ведущий ссылается на B, ветвь относится к D, а прощание - к E.
git init
echo Hello > Hello.txt
git add Hello.txt
git commit -m "Create Hello.txt (commit A)"
git tag start
echo World! >> Hello.txt
git commit -am "Change to Hello World (commit B)"
git checkout start
git checkout -b branch
echo Dave >> Hello.txt
git commit -am "Change to Hello Dave (commit C)"
git merge master
echo Hello World, Dave! > Hello.txt
git add Hello.txt
git commit -m "Merge branch master into branch (commit D)"
git checkout start
git checkout -b goodbye-branch
echo Goodbye > Goodbye.txt
git add Goodbye.txt
git commit -m "Add Goodbye.txt (commit E)"
До этого момента все прошло нормально. Был конфликт слияния, но мы его разрешили. Теперь мы пытаемся переустановить ветвь на E, чтобы в итоге получилось следующее дерево комманд:
A---E----B'
\ \
C'---D'
git checkout branch
git rebase -p goodbye-branch
В этом случае со следующей ошибкой:
Auto-merging Hello.txt
CONFLICT (content): Merge conflict in Hello.txt
Automatic merge failed; fix conflicts and then commit the result.
Error redoing merge f567809e2cc91244cc7fdac210e1771dc75e4d86
Файл содержит следующее содержимое:
Hello
<<<<<<< HEAD
Dave
=======
World!
>>>>>>> 0437403c97f33f229e41ec9584ce891a50052e48
Что я делаю неправильно? Я ожидал бы, что git сможет использовать commit D для разрешения конфликта слияния, с которым он сталкивается при перезагрузке.
Я использую git 1.9.4.msysgit.1, который является самой последней версией прямо сейчас.