Git有没有一种方法可以将提交分组?

6
有没有办法在Git中对提交进行分组?我有一个故事要创建一个用户。 我逐个文件地创建并单独提交每个文件。 然后将其推送到github存储库。 现在我想将所有先前的提交分组,比如在“用户创建”标签下,以便我可以一起引用它们。
我不想整理,所以压缩不起作用。 这个SO问题具有类似的要求,但是在命名提交时,OP使用了@some_label。 我也没有使用任何此类标签。
有没有办法做到这一点。 如果有,怎么做?

3
请参考我在这个类似问题的答案,链接为https://dev59.com/4VwZ5IYBdhLWcg3wQ-Xk#31669260。请注意,在Github上提交请求之前,请按照我的答案将所有提交压缩为一个。 - EnriMR
1
你误解了我的问题。我想要之前的提交记录仍然存在,只是将它们分组。 - inquisitive
2
@Makoto的压缩操作会将多个提交合并为一个提交。这似乎与想要引用一组单独的提交不同。 - Caleb
2
@Inquisitive 你计划如何使用这些分组?例如,您是否需要能够仅选择组中的提交?或者您只需要能够谈论某些提交集?通常,如果您有一组针对给定功能所需的所有提交,并且如果您需要某些能力超出此范围,那么压缩是正确的答案,也许您可以解释一下原因。例如,为什么您的用户创建提交需要单独存在? - Caleb
1
这是一个作业,我们的提交和提交消息也将被我们的老师阅读和评估。所以我仍然需要旧的消息。我想把它们分组以便于我清楚地知道我已经完成了一个故事,而我们将会得到许多这样的故事。我只是好奇在git中是否存在这样的东西。 - inquisitive
显示剩余4条评论
2个回答

10

在一个分支上创建你的提交,然后使用--no-ff将分支合并回主分支。

要做到这一点,假设在用户创建提交之后没有更多的提交:

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

这是一个不错的方法,但我已经推送了提交记录,而没有创建分支。 - inquisitive
我正在撰写一篇回答,也建议这样做,所以现在撤回它。如果您已经推送了提交并且可以重写历史记录,则只需修复它并强制推送即可。 - Sébastien Dawans
3
我已经添加了关于如何追溯创建并合并分支的指示。 - rob mayoff
事实上,git merge --no-ff 看起来是目前解决这个问题的最佳方案,也可以参考 https://dev59.com/IGox5IYBdhLWcg3wpV3F。 - maratbn

3
如果您不想压缩(commit squash),只需进行一次变基(rebase),并在提交信息中添加"@fancy_label",然后按照您的链接中的说明进行操作:link:
您可以在代码仓库中使用"post-commit"挂钩(hooks)来实现此功能。简单地说:
1. 在提交时,在提交信息中包含特殊标签(例如:@fancy_label) 2. "post-commit"挂钩解析提交信息,并检测是否有 @fancy_label (和其他标签) 3. 经过以上步骤后,"post-commit"挂钩将该提交添加到每个标签的提交列表中,并将其保存到持久存储器(如纯文本文件或数据库)中。
这个持久存储器可以是个人私人的(无法通过.git文件夹提交),也可以是公开的(包含在项目内)。您需要创建git别名,以便更轻松地通过相应的标签搜索和列出这些提交。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接