【发布时间】:2019-09-14 23:07:17
【问题描述】:
我有一种情况,我需要停用分支中的某个功能,对其进行调整,然后在未来再次激活。
我的初始场景:
$ git log
14c9dcd (HEAD -> master) feature 3
af64271 feature 2
da0507a feature 1
- 14c9dcd -- 创建 file3.txt
- af64271 -- 编辑了file1.txt;创建了 file2.txt
- da0507a -- 添加file1.txt
现在我需要在 master 分支上恢复 af64271 提交,并保持代码更改可用以便稍后返回(进行一些更改)。
我尝试过:
$ 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 没有合并!
【问题讨论】:
-
我认为feature flags 会是一种更清晰的方法。
-
git revert实际上是一个不错的选择。只需还原构成您要删除的功能的提交或提交范围。然后,在上面构建你的新特性,最后做一个 rebase 来删除 revert 提交。假设所有这些都发生在本地,重写历史并没有错。 -
恢复合并并不意味着“删除共同祖先”
标签: git