为了保持更清晰的历史记录,我试图做一个git rebase。
我在分支机构中有几次提交,我想在重新设置基准时压缩它们。
想要的结果:
从那开始:
Master A-B
\
MyBranch 1-2-3-4-5-...-10-..-20
为此:
Master A-B-C
场景
我从在主服务器中的提交A
分支开始,然后在我的分支上工作:
Master A
\
MyBranch 1-2-3-4-5-...-10
当我在分支机构工作时,在主机中完成了另一次提交B
:
Master A-B
\
MyBranch 1-2-3-4-5-...-10
要拥有良好的CI,我首先将B
提交合并到myBranch
中,并解决了我遇到的所有冲突:
Master A-B
\ \
| ----------- merge
| \
MyBranch 1-2-3-4-5-...-10
然后我在分支中又进行了几次提交:
Master A-B
\ \
| ----------- merge
| \
MyBranch 1-2-3-4-5-...-10-...-20
然后我(使用Intellij)启动了rebase -i
。
在这个阶段,我认为不会再出现合并请求,因为B
被合并到myBranch
中。
但是后来,Intellij要求再次合并我之前已经合并过的相同文件。
当我解决所有冲突时,他要求我再做一次。然后再次。然后再次。一遍又一遍地在相同的文件上。
似乎对于1 - 20
提交中的每个提交(或提交的大部分),我都需要再次解决合并冲突。
仅在解决冲突大约7次之后,操作才结束。
为了避免这个坑,我在这里缺少什么吗?
答案 0 :(得分:0)
简单的rebase -i
只会忽略合并提交。这就解释了为什么在重新定基期间必须执行与合并期间相同的冲突解决方案。此外,一旦在重新定基期间发生合并冲突,它将在以后每次影响相同文件的提交中重复进行。
为避免此问题,您可以尝试使用git rebase --preserve-merges
。