GIT,如何在rebase工作流程中应用错误修正

时间:2014-10-01 13:03:10

标签: git workflow rebase

我们正在使用git,功能分支和rebase将功能分支带到我们的主服务器。所以我们的图表看起来像这样

* 08a3854 - (master, Feature_2) implement feature_2 more
* cf944c7 -                     implement feature_2 ...
* 4b4ed7c - (Feature_1)         implement feature_1 more
* 483fd88 -                     implement feature_1 ...

如果我们现在检测到Feature_1中的错误(并且此功能不是那么老),我们将直接在该点上修复该功能。首先,我们要从Feature_1创建一个分支以进行错误修正。

* 08a3854 - (master, Feature_2) implement feature_2 more
* cf944c7 -                     implement feature_2 ...
| * 2c383b6 - (Feature_1_fix)   fix for feature_1
|/  
* 4b4ed7c - (Feature_1)         implement feature_1 more
* 483fd88 -                     implement feature_1 ...

最后,我们想将Feature_1_fix分支带入Feature_1分支,然后删除修复分支,以便结果看起来像这样。

* 08a3854 - (master, Feature_2) implement feature_2 more
* cf944c7 -                     implement feature_2 ...
* 2c383b6 - (Feature_1)         fix for feature_1
* 4b4ed7c -                     implement feature_1 more
* 483fd88 -                     implement feature_1 ...

是否有可能,我们该怎么做?

1 个答案:

答案 0 :(得分:0)

从某种意义上讲,它在理论上是可行的,但你绝对不希望这样做。

每个提交的哈希都依赖于它的所有祖先。如果更改提交,则所有子提交的哈希值都将更改。从这个意义上说,你的第三个示例图是错误的:提交cf944c7和08a3854将会改变。

也许你听说过口头禅:不要改变被推动的分支。为了达到你想要的效果,你必须将master重新设置为feature_1_fix。任何依赖于当前主人的工作也必须得到重新定位。

08a3854   * (old obsolete master) implement_feature_2 more
cf944c7   *                       implement feature_2
2222222 * | (master)              implement_feature_2 more
1111111 */                        implement feature_2
2c383b6 *   (Feature_1)           fix for feature_1
4b4ed7c *                         implement feature_1 more
483fd88 *                         implement feature_1

提交1111111和2222222是新的,所有基于08a3854工作的人都必须将这项工作改为2222222。

顺便说一句:git不允许你在没有明确指定--force标志的情况下推送这样的东西。

我建议简单地创建分支并合并它。我也不一定建议在最后一次提交功能时直接使用修复分支。如果您有很多更改,将它合并到当前主服务器可能会导致很多冲突。