Git - 如何正确还原更改?

时间:2016-04-04 14:11:48

标签: git merge bitbucket branching-and-merging git-flow

我们刚刚切换到git(使用gitflow分支模型)并且在我们需要退出更改时遇到一些麻烦。

不幸的是,我们经常认为,由于在回归过程中发现的问题或者在测试周期的相当较晚的时间,某个功能不会在版本中发布。我们可以轻松地恢复要退出的功能分支的合并提交,但在合并了错误更改后切断的功能分支也将包含该更改,并且可以在应该发布之前将其恢复到开发或发布分支。

示例:

                               |reverts f1 
 develop-> X---o---o---Y---Z---R---P <- merge f2 to develop picks up f1
            \         /     \     /
        f1-> A---B---C  f2-> D---E

从示例中,f1被剪切,处理并合并回来开发。 f2被切断并开始工作。 f1从提交R处的开发中恢复。然后f2完成并合并回到在提交P处开发。提交P是问题所在:f1通过此提交返回开发。现在,我们在回复中遇到了什么问题吗?有没有办法确保恢复提交不会重新开发?我们使用'revert -m1'恢复。

当我们恢复合并提交时,有什么问题我们做错了吗?我们有什么方法可以做到这一点,因此f1提取的f1的提交将不会包含在合并回来开发中吗?我们是否必须在所有前向功能分支上手动还原这些提交?我们是否应该从开发中删除Master的所有功能分支,因此我们知道他们无法从可能还原的功能中获取任何更改?

欢迎任何建议,谢谢!

1 个答案:

答案 0 :(得分:1)

I don't think there is anything wrong with your workflow except that you have to account for reverting of a commit as it applies to all children not just the develop branch. Because the feature branch f2 also has the changes for f1 i.e. f2 = f2 +f1 in your example and when you merge f2 back in git thinks you want f1 back in as well.

In your example above, you could include a commit R' on the f2 branch to accomplish what you would like to happen.

                               |reverts f1 
 develop-> X---o---o---Y---Z----R----P <- merge f2 to develop picks up f1
            \         /     \       /
        f1-> A---B---C  f2-> D--R'--E
                              **|reverts f1** 

This is assuming that f2 is a long running branch. If it's not and you anticipate it to be a short branch then i'd hold off on the revert R and do it after you merge f2 and its sisters back into develop. This may be useful if you have quite a features being worked on in parallel.

                                     **|reverts f1** 
 develop-> X---o---o---Y---Z-------P---R-- <
            \         /     \     /
        f1-> A---B---C  f2-> D---E

Hope this helps.