git - 更改分支的父级

标签 git git-branch branching-and-merging

一段时间以来一直在寻找解决方案,但由于我远非 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/

相关文章:

git - 如何基于现有的 Github 分支创建新分支? (请阅读 - 试过初学者指南)

Git:在另一个分支工作时修复主分支中的错误

Git 说我删除了放入新文件夹中的照片?

git - 使用 sbt-git 构建包导致 "SNAPSHOT-SNAPSHOT"版本限定符

git 切换分支而不丢弃本地更改

git - 将选择更改提交到另一个分支然后恢复当前分支的工作?

version-control - 在 mercurial 中 merge 书签

ios - 源代码管理 merge 按钮灰显?

svn - 使用奇数分支结构时 Git-svn 分支软管 dcommit

Git:如何只列出本地分支机构?