5

在过去的几周里,我有一个功能分支已与开发分支多次合并。在我们将它合并到主分支之前,我们想要删除过去几周合并到开发分支中的功能分支代码。有没有统一的方法来做到这一点?

合并是使用 --no-ff 创建的,因此新分支中的提交应该有自己的对象。

_______ master ______________________________
                  \                   /
                   \                 /
                    \__hofix-1_____C/
                                    \
_ development _______________________\____________
\                    /          /         /
 \                  /          /         /
  \_feature-test__A/_________B/________D/

所以我想从开发中删除合并的提交 A、B 和 D,同时仍然保留 hotfix-1、合并 C,并且仍然继续在功能分支上工作。

4

2 回答 2

4

这个问题有些模糊。你有一个开发分支,想要取消合并几个传入的合并,留下其余的?如果是这样,您可以使用rebase -i -p一些低点,从待办事项列表中删除合并提交。请注意,您应该重新检查您提取的所有提交,因为下一个工作可能会建立在它之上。

另一种方法是git revert在顶部使用不需要的更改。它完成了最终结果,但可能会给您留下质量较差的历史记录。

于 2013-06-28T14:53:51.120 回答
1

如果我正确地理解了你的情况,我认为你不需要像 rebase、revert 之类的东西。你可以简单地这样做:

  1. 查看开发日志以找到合并 A 之前的提交哈希,并在那里创建一个名为“new-dev”的新分支:

    git checkout -b new-dev somecommithash

  2. 现在从 hotfix-1 分支合并到 C 中:

    git 合并 C

...你就完成了。new-dev 分支现在有了开发的内容,与 C 合并,减去 AB 和 D。

如果您现在想让 developer 分支指向与 new-dev 分支相同的位置,那么简单如下:

git branch -f developer new-dev

但是为了安全起见,您可能希望在将旧的开发人员分支位置强制移动到新位置之前,用标签或分支标记它。

于 2013-06-28T18:36:28.973 回答