2

我们正在开发feature/x. 我们需要时不时地合并此功能master,并合并master回来feature/x以保持同步。该feature/x分支也作为远程分支存在,因此在这里变基不是一个很好的选择。

我们希望master在将来某个时候禁用/隐藏实际功能。事实上,我希望能够创建一个提交 K,master以便通过将其隐藏在 UI 中来禁用正在开发的功能,但保留底层机制。

我也希望它能够工作,以便当我从masterto合并时feature/x,我将获得除 K 之外的所有提交。此外,当我从feature/xto合并时master,提交 K 仍应适用于master,保持隐藏功能。

我试过了

git co master
git commit -am "disable feature x for now"
    => created commit 12345678
git co feature/x
git merge -s ours 12345678

master这有效,除了在我这样做时重新启用该功能

git co master
git merge feature/x

因此,似乎与-s oursfrom mastertofeature/x合并不会导致双向合并。因此,每次我从feature/xto合并时,master我都必须再次禁用该功能,然后这个禁用提交将流回feature/x等等。有没有更好的办法?

4

2 回答 2

1

问题是你真正想做的是一个变基。你可以为你所做的每个 rebase 旋转新的分支,但根据你这样做的频率,这可能是不切实际的。

这是一个额外的步骤,但您可以设置一个(非远程)分支feature/disable_x,其中仅包含要禁用的补丁x。然后当你合并feature/x时,rebase 和 mergedisable_x也是如此。

于 2013-11-26T14:25:50.910 回答
1

考虑使用功能标志(或功能切换)。

这允许代码在 master 上合并,但只有在切换某些标志后才可用(启用该功能)。

优点很多:

  • 更容易的代码管理(代码是实时的)
  • 如果出现问题,很容易回退:只需再次切换标志
  • 轻松逐步上线:只为少数用户启用一项功能

缺点:您将不得不添加一些代码来管理这些标志。但是根据您的语言/编码平台,已经可以使用支持此功能的库。

于 2013-11-26T14:33:52.460 回答