【发布时间】:2017-07-14 10:43:31
【问题描述】:
我正在从事一个有两个分支的项目: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 时,它会倒回到从master 分支的feature 的开头应用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 来说都是新的。
我的最终目标是尽可能简单地清理这个项目(让功能分支重新基于当前主节点)。我不关心提交的历史。
【问题讨论】: