我正在处理一个有两个分支的项目:master
和feature
feature
分支是一段时间前创建的,并且有许多提交记录。
自从创建feature
分支以来,master
分支已经进行了几次提交。
目前,当我尝试从master
上进行rebase
操作时,会出现冲突。 我解决这些冲突,然后用rebase --continue
继续。 然后又再次出现冲突,我再次解决并使用rebase --continue
继续。 这种情况反复发生,而且很多时候似乎出现了相同的冲突。
在我的想法中,以下是发生的事情:
master(commits)->a->b
feature(commits)->c->d->e->f->g
feature
从master->a
中分支出,并创建了所有提交记录。
当我进行rebase
操作时,它会回退到feature
从master
分支中分出的起点,应用了master->b
,然后开始应用feature->c
,此时出现冲突。 我解决冲突(接受master
的更改)并继续。 现在它尝试应用feature->d
,并发现同样的冲突。 再次需要我解决并使用continue
命令继续。这种情况反复发生。
例如以下是更改记录:
master->a
<div id="foo">
master->b
<div id="bar">
feature->c
<div id="fubar">
feature->d
//Nothing has changed, inherited from feature->c
<div id="fubar">
我假设当它到达feature->c
时,会说将foo
更改为fubar
,然后它注意到foo
已经更改为bar
。 我解决bar
,然后使用feature->d
应用相同的逻辑。
我的两个问题:
1)我的理解有关Git如何处理提交/冲突/变基是否正确?
2)我该如何避免一次又一次地解决相同的冲突? 我想把特性分支上的所有提交压缩成一个提交,这样只需要处理一个提交。 我不确定这是否是一个好主意或在这种情况下压缩的最佳方法。
请注意,这只是一个非常简化的例子。 实际上,我有很多提交,每个提交中有许多文件和许多冲突。 其中一些看起来在rebase --continue
过程中是相同的,而其他一些则是每个commit
都是新的。
我的最终目标是尽可能简单地清理此项目(使特性分支重新基于当前主分支)。 我不关心提交历史记录。