11

想象一下这样一种情况,您有同一个项目的两个分支,第一个分支的一个部分在另一个分支上进行了显着重构。但是有一段时间你需要保持两个分支的功能,所以你正在对它们进行错误修复和关键功能添加,有时以不对称的方式。在某些时候,您必须将重构的分支合并到原始分支上。在这种情况下使用的最佳技术是什么?是否仍然可以保持历史清洁?

但更重要的是,在这种情况下我的初始策略应该是什么?

4

2 回答 2

11

由于任务是简单地使用另一个分支而不是master,您可以简单地完全删除master分支或将其重命名为 - legacy,然后取另一个分支并将其重命名为master. 就是这样。以下是您可能需要执行以在本地和 GitHub 上实现目标的实际命令:

git branch -m master legacy               # rename local master to legacy
git checkout legacy
git branch -m another_branch master       # another_branch will be our new master

在本地,我们现在完成了。但是,您不能简单地删除masterGitHub 上的分支。您需要先将另一个分支作为默认分支。这可以在存储库中完成Settings > Default Branch。完成此操作后,您可以继续:

git push origin :master                   # remove master on GitHub
git push origin master                    # push out our new master branch
git push origin legacy                    # push our legacy branch too

然后返回Settings > Default Branch并将默认分支切换回master. 此外,您可以删除在迁移过程中可能创建的所有额外分支。

或者,如果您希望将所有操作保存在历史记录中,请在此处检查正确答案。

于 2013-01-25T08:42:39.413 回答
2

由于您有 2 个分支,因此对另一个分支进行了重大重构,并且您正在维护这两个分支……我会说 Git 不会神奇地帮助您。为了 git 的帮助,您应用于分支 1 的补丁/更改需要与分支 2 相似(但不完全相同)。

由于它被重构,代码可能不相似,除非新代码被模块化以在两个分支上相同。

首先你应该做什么?

  • 将一些单元测试和/或集成测试代码添加到初始分支
  • 在第二个分支上运行相同的集成测试
  • 对于新的更改添加测试
  • 然后您可以验证两个分支的更改是否有效

更新:为了管理对两个分支的更改,您可能只需要一个过程,例如: - 主要在分支重构上工作 - 在完成时将每个“故事”或工作项合并到分支遗留

第二步是我认为如果分支之间的代码差异太大,那将是很多工作。如果您确实必须维护两个分支,请尝试将新代码封装在可以在两个分支中使用的库中。这将使从一个分支合并到另一个清洁器。

于 2013-01-09T20:14:29.033 回答