想象一下这样一种情况:你有两个同一个项目的分支,第一个分支的一个部分在另一个分支上显着重构。但有一段时间你需要保持两个分支功能,所以你正在修复错误和两个关键功能添加,有时以不对称的方式。在某些时候,你需要将重构分支合并到原始分支上。在这种情况下使用的最佳技术是什么?是否仍然可以保持历史清洁?
但更重要的是,在这种情况下,我最初的策略应该是什么?
答案 0 :(得分:9)
由于任务只是使用另一个分支而不是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
我们现在已经完成了。但是,您不能简单地在GitHub上删除master
分支。您需要先将另一个分支作为默认分支。这可以在存储库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
。此外,您可以删除在迁移过程中可能已创建的所有额外分支。
或者,如果您要将所有操作保存在历史记录中,请检查正确答案here。
答案 1 :(得分:2)
由于你有两个分支,一个是从另一个分支显着重构,你维护两个...我会说Git不会神奇地帮助你。对于git来说,你应用于分支1的补丁/更改需要与分支2类似(但不完全相同)。
由于它被重构,代码可能不相似,除非新代码在两个分支上模块化为相同。
首先你应该做些什么?
更新: 要管理两个分支的更改,您可能只需要一个进程,例如: - 主要在分支重构上工作 - 将每个“故事”或工作项合并到分支遗留文件中
如果代码在分支之间的差异太大,我认为第二步是很多工作。如果必须维护两个分支,请尝试将新代码封装在可在两个分支中使用的库中。这将使从一个分支到另一个分支的合并。