2010-06-11 95 views
2

我的公司正在将CVS转换为git。我们已经在CVS很长一段时间,所以有很大的历史。手工操作太多。大规模的git commit squashing

看着日志,可以做很多挤压。很多。我想要做的是钩住一个脚本,它将比较两个相邻的提交。如果它返回true,则连接提交消息并压缩提交。我也很乐意接受两个提交和一个提交消息的命令,然后将它们压缩在一起。

git rebase --interactive与我需要的接近,但“squash”需要太多的手动干预。我也看过使用“fixup”而不是squash,但我不想丢失提交消息。

任何想法?

回答

2

怎么样--autosquash?

你可以将它与git filter-branch结合为重命名提交的脚本。 (一个警告的话,小心过滤器分支,并阅读其手册页中的警告,这不是一个暗淡心灵的命令。)

+0

我可能是错的,但那仍然不能解决“消息连接”问题。 Autosquash看起来与squash/fixup相同,但是基于提交消息。 – Nycto 2010-06-11 22:23:42

+0

实际上,你可能只需要使用filter-branch,完全忘记了rebase --autosquash。 – dublev 2010-06-11 22:32:25

+0

你对过滤器分支的建议证明是正确的。使用“commit-filter”标志允许您处理整个回购中的每个提交。在您传入的回调脚本中,您可以将消息传递给commit-tree命令以更改提交消息。您也可以调用skip_commit将当前提交合并到以下提交中。 – Nycto 2010-06-28 15:59:21