一段时间以来一直在寻找解决方案,但由于我远非 git 专家 - 即使我接近解决方案,我也无法对其进行稍微修改以完成它。
我一直在尝试按照此处建议的方式工作:http://nvie.com/posts/a-successful-git-branching-model/ ,但由于匆忙以及在分支进行修补程序时没有发生什么 - 我从 dev 而不是 master 分支。
简化,假设我们有以下历史记录:
A---B---C--------D---- < developer
\ / \ /
R1--R2 H1---H2
\ \
--------X---------Y--- < master
R1 和 R2 是 relase 分支提交并且没问题。但是,H1 和 H2 是修补程序分支提交,H1 应该从 X(master)分支,而不是 C(dev)。由于 X 和 C 提交背后都有相同的代码,是否可以从 X 中创建 H1 分支?
我希望它看起来像这样:
A---B---C--------D---- < developer
\ / /
R1--R2 H1---H2
\ / \
--------X---------Y--- < master
这根本不会改变代码,我只是想保持一致,并让分支从它们应该开始的地方开始。事情是 - 稍后在 dev 和 master 分支上几乎没有更多的提交。 H1-H2 分支基本上有一个多月的历史,之后有一百多个提交。
正如我所指出的,我是一个 git 初学者,一直在玩 rebase 之类的东西,但结果却大错特错。
有什么治疗方法吗?
最佳答案
如果不重写 H1,然后依次重写 H2,这也意味着重写 D 和 Y,您就无法做到这一点。因此,所有提交都需要更改并重新发布。重新发布已经发布的提交通常不是一个好主意。所以如果不是太大的问题,你不应该这样做,保持原样。
如果你还想这样做,你可以这样做:
- 基于 X 创建一个新的(临时)分支。
- cherry-pick H1;生成的 H1' 现在基于 X。
- cherry-pick H2。
- 将 master 重置为 X(
git reset --hard X
)。 - 将临时分支 merge 到master。
- 删除临时分支。
- 将开发人员重置为 C。
- 将 master merge 到 developer。
- 使用强制选项发布两个分支。
关于git - 更改分支的父级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14162406/