我们正在使用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 ...
是否有可能,我们该怎么做?
答案 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
标志的情况下推送这样的东西。
我建议简单地创建分支并合并它。我也不一定建议在最后一次提交功能时直接使用修复分支。如果您有很多更改,将它合并到当前主服务器可能会导致很多冲突。