首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在git中重基冲突合并提交

在git中重基冲突合并提交
EN

Stack Overflow用户
提问于 2014-02-25 22:00:45
回答 2查看 71关注 0票数 1

我刚刚在它自己的分支(分支feature)上开发了一个新特性,包括十几个提交。在运行所有测试之后,我将这个分支合并到master中,并解决了许多合并冲突。这个过程花了很长时间。只有在我完成了合并之后,我才意识到我从来没有在feature分支中重新建立任何提交的基础,这通常是我的实践。

简言之,我现在有:

代码语言:javascript
复制
(feature)   B-C-D
(master) A-/     \-E (merge commit in master)

但我想要:

代码语言:javascript
复制
   F
A-/ \-D

其中F=B+C+D“挤”在一起。

我这样做的方式是从master创建另一个分支A,从提交A开始。然后,切换到feature分支,完成我想要的所有提交压缩。最后,将feature合并到master_prime中。唯一的问题是,我必须再次解决所有合并冲突。是否有一种方法可以重放/选择合并提交E,这样就不需要这样做了?

我还尝试过git rebase --preserve-merges -i <A>git rebase -i <A>,它们不允许我分别重新设置我想要的提交或让我再次处理合并冲突。

EN

回答 2

Stack Overflow用户

发布于 2014-03-16 19:40:55

使用git read-tree重用合并冲突的解决方案。

我假设您将feature合并到master中。如果将master合并到feature中,则使用master^2而不是master^ (反之亦然)。

  1. 备份合并提交。 git分支合并备份主机
  2. 压缩feature中的提交。确保你不会意外地改变任何东西。 git结帐功能# ..。把所有的东西..。git diff主^2
  3. 删除旧的合并提交。 git签出主git重置硬主^
  4. 将压缩的feature分支合并到master中,重用旧的冲突解决方案。 git合并功能git读取树-重置-u合并备份git提交
  5. 如果您对结果满意,请删除备份分支。 git分支-D合并备份
票数 1
EN

Stack Overflow用户

发布于 2014-02-25 22:34:21

我认为可能有很多方法可以实现你想要的,但首先有几件事:

( 1)如果你不想,你不需要一个新的硕士分支。您可以使用git reset将当前主分支的点更改为A或其他什么,而不需要新命名的分支。(你也可以创建你的新master_prime,做你想让它到“地球上最好的地方”,把master改名为master_old,把master_prime重命名为master )。

但这不是重点,因为这并不是你想要的。

您需要的是特性分支feature,其中包含从AD所需的所有更改。还有..。进行合并所需的更改。在这一点上,您可能想要重新基地,因为这仍然是一个痛苦。但是,您可以执行压缩操作并将合并编辑复制到适当的位置(使用reset而不是留给读者的一个新分支):

代码语言:javascript
复制
git checkout A
git checkout -b feature2
git cherry-pick B..D
... squash away here ...
git cherry-pick E              # copies the merge pain in
git checkout master
git merge feature2

认为

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22027199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档