禁用master中的功能(git)

时间:2013-11-26 14:13:36

标签: git merge feature-branch

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

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

我也希望这样做,以便当我从master合并到feature/x时,我将获得除K以外的所有提交。此外,当我从feature/x合并到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 ours合并masterfeature/x并不会导致两种方式合并。因此,每次从feature/x合并到master时,我都必须再次禁用该功能,然后此禁用提交将返回feature/x,依此类推。还有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

问题是你真正想要做的事情一个rebase。您可以为每个rebase旋转新的分支,但是根据您执行此操作的频率,这可能是不切实际的。

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

答案 1 :(得分:1)

考虑使用功能标志(或feature toggles)。

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

优势众多:

  • 更简单的代码管理(代码是实时的)
  • 如果出现问题,
  • 容易后退:只需再次切换标志
  • 简单渐进式上线:仅为少数用户启用功能

缺点:您必须添加一些代码来管理这些标志。但是根据您的语言/编码平台,图书馆已经可以支持这一点。