You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编辑Rebase/Squash提交信息时如何过滤重复内容?

解决Git Squash时重复提交信息的问题

绝对有办法搞定这个小困扰!Git的prepare-commit-msg钩子正好能帮你在编辑器弹出前自动过滤掉重复的提交信息,完全不用手动删除冗余内容。

具体操作步骤:

  1. 进入仓库钩子目录:打开终端切换到你的Git仓库根目录,直接进入.git/hooks文件夹(这个目录默认隐藏,直接输入路径就能访问)。
  2. 创建/编辑钩子脚本:如果目录里有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
  1. 添加执行权限:在终端运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:16:59