首页 > 解决方案 > 暂时禁用分支中的功能

问题描述

我有一种情况,我需要停用分支中的某个功能,对其进行调整,然后在将来再次激活。

我的初始场景:

$ git log
14c9dcd (HEAD -> master) feature 3
af64271 feature 2
da0507a feature 1

现在我需要af64271只在分支上恢复提交master并保持代码更改可用以便稍后返回(进行一些更改)。

我试着做:

$ git checkout -b save_feature_2
    $ git checkout master
    $ git log --oneline   
        14c9dcd (HEAD -> master, save_feature_2) feature 3
        af64271 feature 2
        da0507a feature 1

#Reverting the "feature 2" commit changes
$ git revert af64271
    [master 8fcee28] Revert "feature 2"
    2 files changed, 1 insertion(+), 2 deletions(-)
     delete mode 100644 file2.txt

# Checking the differences
$ git diff save_feature_2
    diff --git a/file1.txt b/file1.txt
    index ba36cc9..8e90503 100644
    --- a/file1.txt
    +++ b/file1.txt
    @@ -1,2 +1 @@
    -<somecode here>
    -<more code here>
    \ No newline at end of file
    +<somecode here>
    \ No newline at end of file
    diff --git a/file2.txt b/file2.txt
    deleted file mode 100644
    index e69de29..0000000

# Checking log on master
$ git log --oneline
    8fcee28 (HEAD -> master) Revert "feature 2"
    14c9dcd (save_feature_2) feature 3
    af64271 feature 2
    da0507a feature 1

# Checking the save_feature_2 log branch
$ git checkout save_feature_2
$ git log --oneline
    14c9dcd (HEAD -> save_feature_2) feature 3
    af64271 feature 2
    da0507a feature 1

# Making same improviments on "feature 2" addind some code just on "file3.txt"
$ git log --oneline
    c4ff7f2 (HEAD -> save_feature_2) improvements on feature 2
    14c9dcd feature 3
    af64271 feature 2
    da0507a feature 1

# Now i need to reactivate the "feature 2" on master
$ git checkout master
$ git diff save_feature_2
    diff --git a/file1.txt b/file1.txt
    index ba36cc9..8e90503 100644
    --- a/file1.txt
    +++ b/file1.txt
    @@ -1,2 +1 @@
    -<somecode here>
    -<more code here>
    \ No newline at end of file
    +<somecode here>
    \ No newline at end of file
    diff --git a/file2.txt b/file2.txt
    deleted file mode 100644
    index e69de29..0000000
    diff --git a/file3.txt b/file3.txt
    index f70ef26..e69de29 100644
    --- a/file3.txt
    +++ b/file3.txt
    @@ -1 +0,0 @@
    -<improvements on feature 2>
    \ No newline at end of file

$ git merge save_feature_2
    Merge made by the 'recursive' strategy.
     file3.txt | 1 +
     1 file changed, 1 insertion(+)

$ git log --oneline
b10eabc (HEAD -> master) Merge branch 'save_feature_2' - Reactivating the feature 2
c4ff7f2 (save_feature_2) improvements on feature 2
8fcee28 Revert "feature 2"
14c9dcd feature 3
af64271 feature 2
da0507a feature 1

# At this point the "file2.txt" was no merged!

$ ls (master)
file1.txt  file3.txt
$ git checkout save_feature_2
$ ls (save_feature_2)
file1.txt  file2.txt  file3.txt

如您所见,file2.txt 没有合并!

标签: git

解决方案


该分支save_feature_2应包含revert commit 以及revert commit的 revert

当您将此分支合并回时,master您将再次激活该功能。

进一步来说:

  1. master最初,您有带有提交的分支FEATUREFEATURE功能提交的哈希)。
  2. 您想要恢复FEATUREREVERT_OF_FEATUREmaster分支上创建(这是由 生成的提交的哈希git revert FEATURE
  3. 您创建一个名为FEATURE_BRANCH或其他的分支。( git co -b FEATURE_BRANCH) 并且在这个新分支上,您恢复还原提交( git revert REVERT_OF_FEATURE)
  4. 你继续工作master(那里的功能现在不存在)和FEATURE_BRANCH(这里的功能再次出现,你可以继续工作)
  5. 最后,您合并FEATURE_BRANCHmaster并获得原始功能和master.

您遇到的问题是,当将分支合并save_feature_2回 master 时,会发生在save_feature_2分支中且尚未包含在目标分支 ( master) 中的所有提交的更改。但是原始feature提交已经存在,因此不包括这些更改。但是,如果您在该功能分支上包含还原提交和还原提交的还原,您将实现您想要的。

如果您想按原样修复当前情况,您可以简单地合并(您将在那里获得master提交),然后在那里恢复提交。FEATURE_BRANCHREVERT_OF_FEATUREREVERT_OF_FEATURE

尽管如此,我发现功能标志是一件好事,正如@crashmstr 在评论中已经提到的那样。


推荐阅读