git - 暂时禁用分支中的功能
问题描述
我有一种情况,我需要停用分支中的某个功能,对其进行调整,然后在将来再次激活。
我的初始场景:
$ git log
14c9dcd (HEAD -> master) feature 3
af64271 feature 2
da0507a feature 1
- 14c9dcd -- 创建 file3.txt
- af64271 -- 编辑了 file1.txt;创建 file2.txt
- da0507a -- 添加文件 1.txt
现在我需要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 没有合并!
解决方案
该分支save_feature_2
应包含revert commit 以及revert commit的 revert。
当您将此分支合并回时,master
您将再次激活该功能。
进一步来说:
master
最初,您有带有提交的分支FEATURE
(FEATURE
是功能提交的哈希)。- 您想要恢复
FEATURE
并REVERT_OF_FEATURE
在master
分支上创建(这是由 生成的提交的哈希git revert FEATURE
) - 您创建一个名为
FEATURE_BRANCH
或其他的分支。(git co -b FEATURE_BRANCH
) 并且在这个新分支上,您恢复还原提交(git revert REVERT_OF_FEATURE
) - 你继续工作
master
(那里的功能现在不存在)和FEATURE_BRANCH
(这里的功能再次出现,你可以继续工作) - 最后,您合并
FEATURE_BRANCH
回master
并获得原始功能和master
.
您遇到的问题是,当将分支合并save_feature_2
回 master 时,会发生在save_feature_2
分支中且尚未包含在目标分支 ( master
) 中的所有提交的更改。但是原始feature
提交已经存在,因此不包括这些更改。但是,如果您在该功能分支上包含还原提交和还原提交的还原,您将实现您想要的。
如果您想按原样修复当前情况,您可以简单地合并(您将在那里获得master
提交),然后在那里恢复提交。FEATURE_BRANCH
REVERT_OF_FEATURE
REVERT_OF_FEATURE
尽管如此,我发现功能标志是一件好事,正如@crashmstr 在评论中已经提到的那样。
推荐阅读
- ios - DateFormatter 为简单的日期字符串返回 nil 日期
- javascript - Toast 消息 Vue 引导链接
- vba - 如何真正保护 dotm 文件中的 VBA 代码?
- mongodb - 如何更改 .dbshell 历史文件位置
- c# - 如何使用 JSON.Net C# 在 JSON 中反序列化具有引用 ID 的数组
- .htaccess - 尝试从另一个位置获取图像,但 htaccess 中的 RedirectMatch 被忽略
- amazon-web-services - 如何在 AWS eventbridge eventpattern 的任何其他子句中使用多个前缀?
- javascript - How do i get the new html content and its ID to work?
- sql - SSMS SQL - 创建具有相关列的表
- thymeleaf - Thymeleaf lists.sort 导致 LazyInitializationException 尽管在视图中打开会话