有没有办法在 Git 中对提交进行分组?

Posted

技术标签:

【中文标题】有没有办法在 Git 中对提交进行分组?【英文标题】:Is there a way to group commits in Git? 【发布时间】:2015-11-29 13:25:40 【问题描述】:

我有一个故事来创建用户。我逐个文件创建并单独提交每个文件。并将其推送到 github repo。现在我想对所有以前的提交进行分组,比如在“用户创建”标签下,这样我就可以一起引用所有这些提交。

我不想整理,所以壁球不起作用。

This SO question 有类似的要求,但是在命名提交时,OP 使用了@some_label。我也没用过这样的标签。

有没有办法做到这一点。如果是,怎么做?

【问题讨论】:

在此处关注我对类似问题的回答***.com/questions/31668794/… 你误解了我的问题。我希望以前的提交仍然存在,但只是将它们分组。 @Makoto squashing 用一个提交替换了几个提交。这似乎与想要引用一组单独的提交不同。 @Caleb:是的,那是不同的。我会撤回那次欺骗投票,因为这似乎不是他们想要的。 @Inquisitive 您打算如何使用这些群组?例如,您是否需要能够仅选择组中的提交?还是您只需要能够谈论某些提交集?通常,如果您拥有给定功能所需的所有提交集合,并且如果您需要除此之外的某些功能,那么压缩是正确的答案,也许您可​​以解释原因。例如,为什么您的用户创建提交需要单独存在? 【参考方案1】:

在分支上创建您的提交,并使用 --no-ff 将分支合并回 master。

要追溯执行此操作,假设您在用户创建提交后没有更多提交:

    在最新提交上创建一个分支 (git branch user-creation)。 将主分支(我假设您已经签出)移回用户创建提交之前的最后一次提交 (git reset --hard OLD-COMMIT-SHA)。 将user-creation 分支合并到master (git merge --no-ff user-creation)。

【讨论】:

这是一个不错的方法,但我已经推送了提交。不创建分支。 我也在写一个建议这个的答案,所以收回它。如果您已经推送了提交并且可以重写历史记录,那么只需修复它并推送 -f 我添加了追溯创建和合并分支的说明。 确实,git mrege --no-ff 似乎是迄今为止解决此问题的最佳方法,另请参阅***.com/questions/9069061/…【参考方案2】:

如果您不想压缩,只需做一个 rebase 并修改添加“@fancy_label”的提交,然后按照link 中的说明进行操作:

您可以在存储库中使用 post-commit 挂钩来实现此目的 影响。简要说明:

    您提交带有特殊标签的消息(例如:@fancy_labelpost-commit 钩子解析您的提交消息并检测到此 @fancy_label(和其他标签) post-commit 钩子在此之后将此提交添加到每个标签的提交列表并将其保存到持久存储(到普通文件,或 甚至数据库)

此持久存储可以是个人的(在文件夹中不可提交 .git)或可提交(包含在项目中)。

你需要创建 git 别名来搜索和列出这个 按各自的标签提交更容易。

【讨论】:

以上是关于有没有办法在 Git 中对提交进行分组?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Google Cloud Platform 中对服务帐户进行分组?

有没有办法根据小数位在python中对数组/列表的值进行动态分组?

有没有办法在 SQL 中对组执行操作?

在 graylog、prometheus、grafana 等工具中对历史警报进行分组

有没有办法从多个 URL 生成 Web 查询,而无需在 Excel 中对值进行硬编码?

有没有办法让 git commit --verbose 在使用预提交挂钩时显示更新的差异?