3

一段时间以来一直在寻找解决方案,因为我远不是 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 是发布分支提交并且很好。但是,H1 和 H2 是修补程序分支提交,并且 H1 应该从 X(主)分支,而不是 C(开发)。由于 X 和 C 提交背后都有相同的代码,是否可以从 X 获得 H1 分支?

我想让它看起来像这样:

A---B---C--------D---- < developer
\      /        /
 R1--R2   H1---H2
       \  /      \
--------X---------Y--- < master

这根本不会改变代码,我只想保持一致并在应该的地方开始分支。事情是 - 稍后在 dev 和 master 分支上都没有更多的提交。H1-H2 分支基本上是一个多月的历史,后来有超过一百次提交。

正如我所指出的,我是一个 git 初学者,并且一直在玩 rebase 等等,但结果却大错特错。

这个有什么办法吗?

4

1 回答 1

2

如果不重写 H1,则无法做到这一点,然后又重写 H2,这也意味着重写 D 和 Y。因此,所有提交都需要更改和重新发布。并且重新发布已经发布的提交通常是一个坏主意。因此,如果这不是一个太大的问题,您不应该这样做并保持原样。

如果你仍然想这样做,你可以这样做:

  • 基于 X 创建一个新的(临时)分支。
  • 樱桃采摘H1;生成的 H1' 现在基于 X。
  • 樱桃采摘H2。
  • 将 master 重置为 X ( git reset --hard X)。
  • 将临时分支合并到master。
  • 删除临时分支。
  • 将开发人员重置为 C。
  • 将 master 合并到 developer。
  • 使用 force 选项发布两个分支。
于 2013-01-04T18:30:52.153 回答