【发布时间】:2014-10-29 12:00:55
【问题描述】:
我有一个(大)提交树,其中包含几个我想重新定位到另一个提交的合并提交。做一个正常的变基会导致 git 要求我解决合并冲突。我不想审查每个合并,因为这将是很多工作。在了解了 --preserve-merges 选项(在here 中得到了简洁的解释)之后,我认为我找到了完成这项任务的完美工具。但是,我似乎无法让它正常工作。我创建了一个演示该问题的玩具示例。
从一个空文件夹开始,我们首先创建一个包含合并的分支和另一个我们将基于它的分支。
A---B--
\ \
---C---D
\
---E
其中master指B,branch指D,goodbye-branch em> 指的是 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)"
到目前为止,一切正常。有一个合并冲突,但我们解决了它。现在我们尝试将 branch 重新设置为 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,这是目前最新的版本。
【问题讨论】:
-
你帮助了很多 Jubobs,我赞成你的回答。但严格来说,这个问题仍然没有答案。这个问题的解决方案是 rerere-teach.sh 脚本的 windows 版本。
标签: git git-rebase