我们在使用 git 进行版本控制时,可能遇到这样的需求:同时维护多个永久性的 branch(分支),每个 branch 可能对应于针对不同客户的不同实现;在分支间切换,可以方便地为各个客户生成特定的版本。这些所谓“永久性”的分支,与通常使用分支的情形不同,因为它们会长期存在并随着整个软件的演进不断变化,而不是实现某些 feature 后就并入主分支(master)。各个永久分支的差异并不大,如何管理各个分支的公共部分(common part)成为一个重要问题。
我们首先给出满足这一需求的方案,然后指明对于遗留的、已经“污染”的分支结构如何重组为新方案。
最合理的分支结构应该是这样的,选取 master 或某个分支作为共同部分的代表,也就是说所有对共同部分的更改都切换到这个分支下进行;然后各个永久分支只改动自己特殊的部分,并不断 rebase 到这个共同分支的顶端(head),以各自更新共同部分。如下图。
<