如果它们具有相同的提交消息,如何在git中以编程方式压缩合并的提交?

时间:2019-07-26 20:55:20

标签: git rebase git-filter-branch

我使用了git filter-branch --subdirectory-filter选项从一个仓库中提取两个子目录,并将它们合并到另一个仓库中。但是,我现在需要压缩提交,因为现在涉及新的仓库都重复了涉及两个子目录的所有提交。

要解决此问题,如何基于某些规则以编程方式合并所有此类提交?以我为例,我可以确定,如果提交以“ Merge PR #PRNumber”开头,且编号相同,则表示该副本是重复的,可以一起压缩。

我正在考虑编写一个脚本,该脚本将查看“ git log”的输出,然后查找这些重复项,并执行git rebase --onto commitA commitB

但是我想知道是否有一种更快/ git-native的方式来做到这一点。有谁知道实现此目标的其他方法?

2 个答案:

答案 0 :(得分:1)

您可能还需要执行其他步骤来修改范围中的提交消息,但是可以使用git rebase来完成。首先,将fixup!放在要合并的每条提交消息上,这告诉git它可以自动将它们与匹配消息一起压入范围内的第一个提交中。然后,运行git rebase --interactive --autosquash,并验证它是否正在执行您期望的操作。

答案 1 :(得分:0)

我不确定您的历史记录如何,通常提交的消息Merge PR #PRNumber来自merge commit,但这不是重复的。但是...

我会做一个git日志来查看提交的分布情况

$ git log --oneline
$ git cherry-pick --squash <sha1>..<sha1>

如果您想要压榨的提交分布更加分散,则bash for loop可以工作(不确定您使用的是windows还是linux),如果您可以轻松地(根据您说的话)确定要在顶部squash中选择哪一个。

如果您将log --oneline粘贴到此处,我们也可以帮助实现自动化。