为客户清理git分行

为客户清理git分行,git,Git,在工作中,我们有一个git流 -开发人员在开发分支中纠正给定的缺陷 -然后,他们必须在integ分支中“放入”(*)其更正 -我们的客户必须能够访问此integ分支,因为他们希望签出我们的代码并自行重新编译 客户希望有一个干净的分支,理想的情况是每纠正一个缺陷提交一次 但是我们的开发人员可能会在几个提交中交付他们的工作(一个缺陷由开发分支中的几个提交纠正) 如果我们简单地将开发分支合并到integ分支中,客户机将在历史记录中看到开发人员执行的所有原子提交,这是应该避免的 有关(*)的问题: 我们

在工作中,我们有一个git流 -开发人员在开发分支中纠正给定的缺陷 -然后,他们必须在
integ
分支中“放入”(*)其更正 -我们的客户必须能够访问此
integ
分支,因为他们希望签出我们的代码并自行重新编译

客户希望有一个干净的分支,理想的情况是每纠正一个缺陷提交一次

但是我们的开发人员可能会在几个提交中交付他们的工作(一个缺陷由开发分支中的几个提交纠正)

如果我们简单地将开发分支合并到
integ
分支中,客户机将在历史记录中看到开发人员执行的所有原子提交,这是应该避免的

有关(*)的问题: 我们如何为客户清洁分行? -不向开发人员强加“每个缺陷一次提交”规则 -理想情况下,不必对
integ
分支中每个缺陷对应的原子提交进行cherry拾取和挤压(因为cherry拾取重复了提交)

编辑: 我不想执行交互式的git-rebase,并挤压来自开发分支的提交。这是开发人员分支,从开发人员的角度来看,他们拆分提交有一个很好的理由(可能在技术上或逻辑上,创建多个提交是有意义的)。
从客户的角度来看,他们不关心一个缺陷被多次提交纠正的事实,他们希望在他们的分支上有一个干净的历史记录

您可以使用
git log只显示合并到integ中--合并
您可以使用
git log只显示合并到integ中--合并
如果我读对了,您只需要在从dev分支合并时包含
--no ff
标志(无快进)。您的修复将从dev分支合并到integ分支,作为一个包含所有更改的提交


几年前,有一篇相当著名的博客文章提倡这种工作方法

如果我读对了,那么当您从dev分支合并时,只需要包含
--no ff
标志(无快进)。您的修复将从dev分支合并到integ分支,作为一个包含所有更改的提交



几年前,有一篇相当著名的博客文章提倡这种工作方法

可能重复我不同意重写历史记录,用标签代替怎么样?为已解决的问题创建一个标记,这样他们就可以签出相应的标记。你会将干净的历史记录与客户希望看到的内容混淆。清理历史记录是您的开发人员创建的,您的客户希望看到与相同缺陷相关的提交被挤压。如果客户确实需要挤压提交的历史记录,您必须创建它,例如,在交互重定基时。很可能情况并非如此,您的客户需要的只是对分支机构的不同看法。那么,为什么客户需要压缩的历史记录呢?他们想对历史做些什么?他们是否只需要一个变更日志,或者他们是否积极处理您提供的历史记录?我不同意重写历史记录的可能副本,使用标记代替如何?为已解决的问题创建一个标记,这样他们就可以签出相应的标记。你会将干净的历史记录与客户希望看到的内容混淆。清理历史记录是您的开发人员创建的,您的客户希望看到与相同缺陷相关的提交被挤压。如果客户确实需要挤压提交的历史记录,您必须创建它,例如,在交互重定基时。很可能情况并非如此,您的客户需要的只是对分支机构的不同看法。那么,为什么客户需要压缩的历史记录呢?他们想对历史做些什么?他们需要的只是一个变更日志,还是他们积极处理你提供的历史?是的,这可能会有所帮助。我最初的方法的问题是,客户机可以访问integ分支,他可以运行您的“git log--merges”,但他也可以在repo中看到他想要的任何东西。如果我将integ分支推到远程存储库中呢?在远程回购中,开发分支中的承诺也会被看到吗?是的,这可能会有所帮助。我最初的方法的问题是,客户机可以访问integ分支,他可以运行您的“git log--merges”,但他也可以在repo中看到他想要的任何东西。如果我将integ分支推到远程存储库中呢?开发分支中的提交也会在远程回购中看到吗?我还记得读过这篇文章。问题是,无论分支模型是什么,当develope合并到发布分支时,或者当featurex合并到develope分支时(即使没有ff)每个有权访问回购协议的人都可以看到所有历史记录。我需要一种方法,将我的历史记录的“过滤”视图发布到客户的回购协议中。您似乎在问一些与原始问题不同的问题。你会问“客户想要一个干净的分支,最好是每个纠正的缺陷都提交一个分支。”这就是合并——没有ff会给你的结果。结合@Graham的答案,你还可以得到你想要的历史。当然,正如你所指出的,如果他们可以访问与你相同的回购协议(或克隆协议),那么是的,他们可以访问整个历史。这是git的一个优势,所以也许您的客户只需要接受教育?是的,这是一个很好的总结。我也记得读过这篇文章,我会尽力说服他们这样做。问题是,无论分支模型是什么,当develope合并到发布分支时,或者当featurex合并到develope分支时(即使没有ff)每个有权访问回购协议的人都可以看到所有历史记录。我需要一种方法,将我的历史记录的“过滤”视图发布到客户的回购协议中。您似乎要求的是与原始qu不同的内容