3

这是我的场景:

假设我想修复 github 上的一个开源项目。在高层次上,我遵循以下工作流程:

  • 在 github 上 fork 源项目
  • 在本地克隆叉子
  • 从 master 创建一个主题分支
  • 进行修复(在这里挥手无关的细节......)
  • 将主题分支推送到 github
  • 向原始源项目提交拉取请求

好的,现在假设我已经这样做了几次,所以我有名为 issue#123 和 issue#456 的主题分支。原源项目,除了master分支,还有release分支,比如1.0、1.1等。

我有自己的独立项目,使用这个开源项目的 1.1 版。我不想针对开源项目的“大师”进行构建,因为它还不稳定。我需要的是开源项目 1.1 分支的本地构建,其中还包括我对问题#123 和问题#456 的修复。

很抱歉设置冗长......无论如何,我目前正在做的是创建一个名为 my-1.1 的本地分支(从 1.1 分支),从我的主题分支中挑选修复程序,然后构建它并使用结果我独立的、依赖的项目。

我不是 100% 肯定樱桃采摘是正确的方式,但合并似乎不正确,因为我不希望 master 的所有 1.1 后更改(它们存在于我的主题分支中)流入“my-1.1”分支。这是最好的方法吗?有什么需要注意的问题吗?

我能想到的唯一另一种方法是为每个修复创建重复的主题分支,一个在 master 的分支中,一个在 1.1 的分支中。然后我可以将基于 1.1 的主题分支合并到 my-1.1 中,而不是从基于主的主题分支中挑选提交。但这似乎是个大麻烦。

4

2 回答 2

1

您要做的是使您的主题分支脱离最旧的分支,然后您可以将其合并到两者中,而不会意外包含较新的内容。换句话说,首先在 1.1 中进行修复,然后将其合并到 master 中,而不是相反。

于 2012-09-05T21:04:24.830 回答
1

不,这是git rebase. 假设您的主题分支topic123master. 相反,您希望它分支1.1。只需发出以下命令:

git rebase --onto 1.1 master topic123

假设topic123不依赖于1.1and之间引入的代码master,那会很好。如果它确实依赖于该代码,那么整个练习无论如何都会失败,因为您在 1.1 版本之后依赖于代码。

git checkout 1.1 && git merge topic123

对所有主题分支重复此操作。您已经在远程分支上发出了拉取请求,因此假设您已完成对它们的编码,您的主题分支的本地副本具有较旧的合并基础这一事实并不是什么大不了的事。那写的,如果你想把它们放回顶部master,只需颠倒参数:

git rebase --onto master 1.1 topic123

或者,如果您不想处理强制推送,请重置为遥控器的副本:

git reset --hard <repo>/topic123
于 2012-09-05T21:19:30.757 回答