我使用了git filter-branch --subdirectory-filter
选项从一个仓库中提取两个子目录,并将它们合并到另一个仓库中。但是,我现在需要压缩提交,因为现在涉及新的仓库都重复了涉及两个子目录的所有提交。
要解决此问题,如何基于某些规则以编程方式合并所有此类提交?以我为例,我可以确定,如果提交以“ Merge PR #PRNumber”开头,且编号相同,则表示该副本是重复的,可以一起压缩。
我正在考虑编写一个脚本,该脚本将查看“ git log”的输出,然后查找这些重复项,并执行git rebase --onto commitA commitB
但是我想知道是否有一种更快/ git-native的方式来做到这一点。有谁知道实现此目标的其他方法?
答案 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
粘贴到此处,我们也可以帮助实现自动化。