从Git分支临时删除功能

从Git分支临时删除功能,git,Git,我们使用git来管理应用程序的代码库,我还没有遇到过这样的情况,但我想这是很常见的 我们想暂时删除一个功能,然后在将来的某个时候重新添加它。我试着想象一下支持这一点的分支结构,或者我们是否应该做一些简单的事情,比如从代码中删除特性,当准备好重新添加它时,从提交历史中重新创建它 有人能给我指出处理这种情况的正确方向吗?这是一个应该有效的策略。听起来你的工作已经融入到你的项目中了,所以下面是我要做的。首先选择您的起点,对我来说通常是dev分支(假设还有主分支)。衍生新分支,该分支将是从项目中删除的功

我们使用git来管理应用程序的代码库,我还没有遇到过这样的情况,但我想这是很常见的

我们想暂时删除一个功能,然后在将来的某个时候重新添加它。我试着想象一下支持这一点的分支结构,或者我们是否应该做一些简单的事情,比如从代码中删除特性,当准备好重新添加它时,从提交历史中重新创建它


有人能给我指出处理这种情况的正确方向吗?

这是一个应该有效的策略。听起来你的工作已经融入到你的项目中了,所以下面是我要做的。首先选择您的起点,对我来说通常是
dev
分支(假设还有
主分支
)。衍生新分支,该分支将是从项目中删除的功能

git checkout -b dev_feature_removed
同时旋转一个分支,该分支将在项目中维护该功能

git checkout -b dev_feature_sustained
现在进行编码和测试,您需要确保在
dev_feature_removed
中正确、完全地删除此功能,并且一旦确定是这种情况,就将分支重新合并到生产中。在我的情况下,开发人员需要进行进一步的测试,然后进入master进行测试

同时,您还可以在回购协议中保持其他分支机构的持续发展。您可以将dev合并到这个分支中以保持它的同步,还可以通过将它合并回dev(在我的情况下,可能是您的master)来添加到您已删除的功能(bug修复或新的bull和whistles)中,以备它恢复使用


此功能的返回可能会导致合并冲突,具体取决于您的功能的紧密耦合程度。因为你的合并策略早于回购协议,所以听起来无论发生什么,你都会产生冲突,因为合并策略只能起到这么多的作用。但是,由于您将有两个完整的提交树,一个有功能,另一个没有,因此您将知道功能重新连接到项目的每个点的存在。因此,您将拥有将其放回项目中所需的一切。这就是我将在我的案例中起草的内容。祝你好运,伙计。

我会用代码本身解决这个问题。添加一个功能映射(基本上是每个功能的布尔标志),然后根据需要启用/禁用功能,而不必实际从存储库中删除代码/逻辑

配置文件中的某些内容非常简单,如:

<?php
$features = array(
    'news' => true,
    'events' => true,
    'shop' => false
);

以下是一个具体示例,展示了以下方面的策略:

基本上,
restore-b
始终包含
prod
中的所有内容以及功能的恢复(commit
a122936
)。当您在
prod
上进行新的提交时,它们将合并到
restore-b
,因此,无论何时您准备恢复该功能,都可以进行简单的快速向前合并


一种更简单的方法是避免创建
a112936
commit和
restore-b
分支,直到您准备好恢复该功能为止。创建并保持最新的
restore-b
分支的好处是,与其他更改的任何冲突都会以及时的方式逐一解决(希望是由编写冲突代码的开发人员在编写冲突代码后不久解决)。这将使功能保持“新鲜”和“在平台上”,随时可以包含在生产版本中,而无需额外的开发工作。

可以临时删除Git回购历史之前的功能的一种方法是提交删除该功能。然后,当您想重新添加该功能时,只需将其删除即可。这将做一个反向补丁,这意味着它将反向应用更改,这将有效地重新添加功能:

git revert <sha of commit that removed the feature>
假设您经常将
保存的功能
主功能
(或
开发
,如果您使用的是此功能),在执行过程中解决冲突,则将功能重新合并到中应该不会有问题

参考文件:


答案可能不重复,但。。。我在git工作了两年,没有看到这种情况。只有在100%准备就绪时,功能分支才能合并到
开发
/
/任何其他
分支。当您的功能部件代码位于master中,但尚未准备就绪或尚未测试时,不得出现任何情况。您可以跟踪代码的删除。你的承诺有多精确?你们有信心通过提交删除该功能吗?这对于决定策略很重要。@madhead是的,这就是我们要做的-我想从开发中删除代码,这样我们就可以在没有代码的情况下继续前进,并合并到master中,这样我们就可以部署,但希望能够在将来某个日期将代码重新提交到开发中。@IamJohnGalt所讨论的功能实际上是在日期之前或重新发布,因此,我们将创建“新”代码来删除它,但希望能够在将来撤消此更改。我们为每个小功能、修补程序等进行分支,因此我们是非常精细的。我喜欢这个想法,只是对该功能进行切换。在某些情况下,这看起来可能不那么费力。它肯定不是,就像我说的,删除负责该功能的实际代码,只是在以后重新添加它。
$ git log --graph --decorate --oneline
*   d1d201b (HEAD, restore-b) Merge branch 'prod' into restore-b
|\
| * 18d759f (prod) add feature e in prod
* |   191037e Merge branch 'prod' into restore-b
|\ \
| |/
| * e0de1be add feature d in production
* | a122936 Revert "remove feature b in production"
|/
* d3e2c42 remove feature b in production
* 5369ecf existing three features
git revert <sha of commit that removed the feature>