自动重写完整的git历史记录以摆脱简单的合并提交

kro*_*old 9 git git-rewrite-history

我们的团队使用纯粹基于合并的git工作流程,我们正在讨论是否可能要求所有团队成员在一个下午将所有工作推送到服务器并进行一个重新定位服务器仓库的晚上.

我(想)我想自动做的是,只要所有提交只在同一组分支上并且并行提交的数量低于给定的阈值,我想重新定义系列并删除合并提交(S).但我愿意接受建议吗?

有人知道怎么做吗 ?

CB *_*ley 11

在我看来,你应该避免重写历史的诱惑,只是为了让它"看起来不错".真的没有意义.事实上,历史是对现实的更准确的表示,而git的报告工具都被设计为即使有很多小合并也很有用.

如果您对查看大量合并不感兴趣,可以将它们从许多报告任务中删除,例如

git log --no-merges
Run Code Online (Sandbox Code Playgroud)

你所提出的建议(一个变相的晚上,可能是所有开发人员都必须这样做reset)似乎是为了工作而创造工作.


Jos*_*Lee 5

我不确定这有多简单.如果你这样做rebase -i,它将尝试忽略所有合并,这些合并成功进行合并而没有冲突,但是如果发生冲突则停止并等待你.

rebase -i -p另一方面,如果你调用它,它将保留合并,这是你在用户进行真正合并时想要的,但完全错过了这一点.

也许这两个命令的某些序列,只在你想要的时候保留合并,可以在这种情况下完成工作.

不过,我必须同意查尔斯的观点,即历史反映现实比使其"看起来漂亮"更有价值.事实上,一个提交是在不了解另一个提交的情况下进行的,并且在源代码的情况下,这可以告诉您为什么可能出错.

我们的团队使用纯粹基于合并的git工作流程

总是拉扯--rebase(例如git pull -r)有什么问题?如果您需要平面拓扑,最简单的方法是在您可以重新绑定时进行合并.

另外:你说你只想在"合并是干净的"时变平.我只是在这里推测,但我不认为git记录在事件之后发生冲突,而不是默认提交消息中的注释,这可能仍然不存在.