编辑Rebase/Squash提交信息时如何过滤重复内容?
解决Git Squash时重复提交信息的问题
绝对有办法搞定这个小困扰!Git的prepare-commit-msg钩子正好能帮你在编辑器弹出前自动过滤掉重复的提交信息,完全不用手动删除冗余内容。
具体操作步骤:
- 进入仓库钩子目录:打开终端切换到你的Git仓库根目录,直接进入
.git/hooks文件夹(这个目录默认隐藏,直接输入路径就能访问)。 - 创建/编辑钩子脚本:如果目录里有
prepare-commit-msg.sample模板文件,复制一份并去掉.sample后缀;如果没有,直接新建prepare-commit-msg文件,把下面的脚本内容粘贴进去:
#!/bin/sh # 仅针对squash操作处理提交信息 if [ "$2" = "squash" ]; then # 提取非注释且不重复的行,保留首次出现的内容 awk '!seen[$0]++ && !/^#/' "$1" > temp_msg # 把原提交信息里的注释行追加回去 awk '/^#/' "$1" >> temp_msg # 替换原提交信息文件 mv temp_msg "$1" fi
- 添加执行权限:在终端运行
chmod +x .git/hooks/prepare-commit-msg,确保Git能正常执行这个钩子脚本。
脚本效果说明:
这个钩子只会在你执行squash操作时触发:
- 它会自动过滤掉所有重复的非注释行(也就是你的提交信息正文),只保留第一次出现的那一份;
- 同时完整保留Git自动生成的注释内容(比如提示这是合并了几个提交的说明);
- 处理完成后,编辑器弹出时就只会显示一份提交信息,再也看不到重复内容了。
举个例子,原来的squash提交信息是:
Message 2 Message 2 # This is a combination of 2 commits. # ...(其他Git自动生成的注释)
经过钩子处理后,就会变成:
Message 2 # This is a combination of 2 commits. # ...(其他Git自动生成的注释)
如果你的提交信息是多行内容,这个脚本也能正常工作,只会去掉完全重复的整行,不会破坏原有信息结构。
内容的提问来源于stack exchange,提问作者Sander Verhagen
相关产品推荐
相关产品推荐

