Git-Flow undo a finished feature branch
如果你想"撤消"一个特性分支,你有什么选择?假设您添加了一个新功能 supercool-feature 并完成(合并到开发并删除功能分支),然后它进入发布。但是你的用户真的不喜欢这个supercool-feature。如何撤消/倒带/撤消已合并到开发和发布中的此功能?
我正在使用 SourceTree 进行版本控制。
- 那么你恢复合并......显然它比这更复杂一点,但细节在于你如何组织你的代码和你的测试等。我觉得这个问题更多。
-
这也不是一个真正的 git-flow 特定问题。 git-flow 为您所做的只是从开发中创建您的功能分支,然后将其合并回开发中。 git-flow 中没有神奇的东西,它只是 git。
-
@AlexBrown 那么如何恢复合并?我不确定您是否熟悉 git-flow 流程的工作原理。但是当你在 git-flow 中完成一个特性时,它会被合并到一个"开发"分支中,然后这个特性分支被删除。当您决定发布时,您从开发中创建一个新分支并进行特定于发布的更改,然后将其合并到"主"中。那么我将如何恢复合并到开发中的 supercool-feature 呢?
-
啊,我没有将 git-flow 确定为产品 - 你说得对,我不熟悉它。但是,在基本 git 中,功能分支的合并点应该是提交本身 - 只需找到它并还原它。
-
使用 git revert。它最适合 git-flow 过程。
-
如何撤消 git flow 功能完成的可能重复项?
-
@Hasturkun 不,不是重复的。在另一个问题中,合并提交是在本地完成的,但没有推送到任何地方,这是一个足够重要的区别,答案完全不同。
-
@hvd:好的。自从我删除了 Peter van der Does 关于重复的评论后,我大部分时间都做了标记。 (因为那不属于问题)
-
@Hasturkun 啊,谢谢你的解释,我没看到。同意,这不应该放在问题中。
运行这个命令
1
| git revert -m 1 <sha1 of M> |
解释
你的情况大概如下:
1 2 3
| A-B-----C---D-M # master
\\ /
X-Y---Z- # supercool-feature |
A、B、C 和 D 在您的主分支中,X、Y 和 Z 在您的功能分支中。当您执行 git merge supercool-feature 时,Git 为您创建了一个"合并提交"M。此提交包含来自您的功能分支的所有提交以及修复合并冲突的可能修复。因此,如果您 revert 那一次提交,您的功能分支中的每一项更改都将再次消失。
- 恶魔倡导者:它怎么知道从超酷功能 XZY 中删除所有内容,而不是从 master (CD) 中删除所有内容?合并是对称的...
-
合并不是对称的。 git merge 查看要合并的分支 (git diff B..Z) 中的变更集,并将其压缩为一个提交。
-
恢复合并提交后,如果我们将来再次需要该功能怎么办?特性分支已经被删除,合并提交被恢复,所有与特性相关的代码不会丢失吗?
-
@gaurav5430 您始终可以在该"还原"功能分支的尖端创建一个分支。例如。 git branch featuremy-reverted-feature {sha}。由于它现在被"引用",您将可以访问分支历史记录并且它不会被 Git 清理。
其实命令是
1
| git revert -m 1 <sha1 of M> |
删除 M 移回包含 X,Y,Z 的分支,这不是主线 1.