用rebase修改git合并

3

tl;dr

我在实际合并之前,已经通过master -> feature合并更新和解决了冲突。 我可以重新将功能基于主分支进行变基,并应用合并的冲突解决方法吗?请查看下面的代码示例。

o               - TODO 合并feature到master
|\
| o     feature - "将远程跟踪分支'master'合并到特性"
|/|
o |     master         
| o             - "在此实现一些新功能"
| |
...
|/  
o
o               - TODO 合并feature到master
|\
| o     feature - "在此实现一些新功能"
|/
o       master         
|
...
|
o

详细版

我想要合并一个相当旧且有冲突的特性分支,因为在期间其他工作已经合并到了主分支。首先,我通过master -> feature合并更新了feature分支。现在我可以成功地合并回特性分支而不出现冲突。但是现在看着历史记录,我意识到我应该重新将我的特性基于最新的主分支进行变基。不幸的是,我不得不解决相当多的冲突,我能否重复当前状态?


不,我认为您不能重用当前状态。虽然在rebase的过程中可能会发生类似的冲突,但它们会发生在不同的点上,因为每个提交都会被重新应用。所以,我建议使用rebase重新做事情。 - Tim Biegeleisen
1个回答

1
正如Tim Biegeleisen所评论的那样,您不能在重定基时“直接”重用合并提交(即您解决冲突的地方)。
合并冲突是在合并提交中解决的,在执行“rebase master”命令时将删除该提交。
然而,如果合并冲突特别痛苦,或者您只有几个提交要处理,可以按以下工作流程进行:
合并master到feature 解决冲突 对您的feature分支执行软重置 隐藏更改内容 重定基master 恢复您的隐藏更改 重新创建您的提交
通过执行软重置,合并后实际的文件更改会被保留,因此您无需像重新定位基底一样解决冲突。

这看起来很有前途。我只有一个提交,但它包含了很多更改。我可以进行软重置,然后还原工作 - 这应该只产生冲突解决,对吧?我会试着操作一下。 - Qwerty
它不仅包含冲突解决,还包含原始工作和冲突解决 - 这听起来就像你想要的,特别是因为只有一个提交。 - Philip Pittle
1
我意识到我没有完全解释步骤 - 诀窍是一旦你完成了软重置,然后你可以隐藏更改,然后将你的特性分支更新到主分支(即rebase),重新应用隐藏的更改,然后你就拥有了所有的工作更改,此时你可以重新创建提交并且你应该可以顺利进行。 - Philip Pittle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接