2017-03-04 87 views
1

这可能是重复的,但在通过关于创建发布的GitHub help page并经过许多帖子之后,我还没有找到我要找的内容。在git中选择发布的内容

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

我真正想要做的是选择准备发布的文件夹和文件,只筛选这些文件的相关历史记录,以及重新整理这些新历史记录之外的任何不在发行版中的内容。我意识到这是一种“重写历史”的形式,但有没有办法用git来做到这一点?如果没有,创建具有相关历史记录的版本的“正确”方式是什么,以后可以合并?

+1

“创建具有相关历史记录的发行版,并可在稍后进行合并”。这实际上是分支的定义。我不明白你关心每个版本的分支。 –

+0

我可以问为什么你不想要发布分支中未发布的作品的历史? – oyvind

+0

@oyvind我认为你和马特是正确的,它并没有任何实际的区别,但我会觉得它更清洁,我认为历史也会更容易管理/存储,如果有办法修剪任何东西对指定文件的一个子集无关紧要,并且在这个新的历史记录之上重新分配未选定的内容。在回顾特定版本的标签时,它也会使其更加清晰。 – Sheljohn

回答

1

尝试使用子目录过滤器和修剪空开关的git filter-branch。确保你知道你在做什么,因为这是一个非常有侵略性的命令。阅读整个手册页面https://git-scm.com/docs/git-filter-branch。至于将其余的历史放在首位,我认为冲突的数量将完全禁止,除非你的历史特别短。另外,如果您正在讨论重新开发主开发分支,那么当开发人员将新版本引入其各自的本地克隆时,会造成麻烦。

+1

谢谢,我想樱桃采摘到一个新的分支(正如Steven的答案中所述)可能是创建发布的最佳和最传统的方式。 [这篇文章]中的最后一张图(http://stackoverflow.com/a/5968622/472610)显示了一个典型的使用git的项目开发,我希望它在实践中是有序的,或者我只是在制作线性进展。 :) – Sheljohn

+0

我不确定排除分支中的文件是很常见的。如果你可以多说一些这些部分版本的外观,我可以多一点帮助。也许,如果您要独立发布部件,最好使用单独的回购或每个部件的单独发布分支,因为您不需要排除文件,因为每个分支都可以知道要从中释放哪些部分。很多都可以通过发布脚本来解决:-)。 – oyvind