选择要在 git 中发布的内容

Selecting contents for release in git

这可能是重复的,但是在阅读了关于创建版本的 GitHub help page 以及关于 SO 的许多帖子之后,我还没有找到我要找的东西。

我在git工作了一段时间,我经常发现自己处于master中的部分内容可以分享,但其他内容还需要完善的情况,进一步测试或重构。我可以创建一个新分支并删除我现在不想发布的内容,但这仍然保留了它们的历史,对于下一个版本,我将无法简单地将改进与新内容的子集合并基本上每次都从一个全新的分支开始。

我真正想做的是 select 准备发布的文件夹和文件,仅过滤这些文件的相关历史记录,并在此基础上重新设置发布中未包含的任何内容新的历史。我意识到这是 "rewriting history" 的一种形式,但是有什么方法可以用 git 来做到这一点吗?如果没有,"proper" 创建具有相关历史且可以在以后合并的版本的方法是什么?

最简单的解决方案可能是保留一个单独的 release 分支,其中包含您想要的文件 public,然后是 selectively merge in the files you want changed from master。这样,实际上只有您想要更改的特定文件会得到更新。

尝试 git 使用子目录过滤器和修剪空开关的过滤器分支。确保你知道自己在做什么,因为这是一个非常具有侵入性的命令。阅读整个手册页 https://git-scm.com/docs/git-filter-branch

至于将其余历史重新定位在顶部,我认为冲突的数量将完全令人望而却步,除非您的历史特别短。此外,如果您正在谈论重新建立主要开发分支的基础,那么当开发人员将新版本拉入他们各自的本地克隆时会造成麻烦。