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

如何在Git Bash(VIM环境)自动填充含上次合并后提交的合并信息?

实现自动填充Merge Commit Message的方法

当然可以实现!你要的这种自动填充merge commit message的需求,用Git的prepare-commit-msg钩子就能搞定——它会在VIM打开编辑commit message之前自动运行,帮你生成符合要求的内容。下面是具体的操作步骤:

1. 创建钩子文件

进入你的Git仓库根目录,找到.git/hooks文件夹(默认是隐藏的,用ls -la就能看到)。里面默认有个prepare-commit-msg.sample示例文件,我们需要新建一个不带.sample后缀的prepare-commit-msg文件:

cd .git/hooks
touch prepare-commit-msg
chmod +x prepare-commit-msg # 给文件加上执行权限,不然Git没法运行它

2. 写入钩子脚本

用VIM打开这个新文件:

vim prepare-commit-msg

然后把下面的bash脚本粘贴进去(按i进入插入模式,粘贴完按Esc,输入:wq保存退出):

#!/bin/bash

# 只针对merge commit触发逻辑
if [ "$2" = "merge" ]; then
    # 获取当前分支和要合并的分支名称
    CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
    MERGED_BRANCH=$(git rev-parse --abbrev-ref MERGE_HEAD)

    # 找到上次merge的commit记录;如果是仓库第一次merge,就取初始commit
    LAST_MERGE_COMMIT=$(git log --merges --pretty=format:"%H" -1 HEAD^)
    if [ -z "$LAST_MERGE_COMMIT" ]; then
        LAST_MERGE_COMMIT=$(git rev-list --max-parents=0 HEAD)
    fi

    # 抓取上次merge之后到当前HEAD的所有非merge commit的message
    COMMIT_LIST=$(git log --pretty=format:"%s" $LAST_MERGE_COMMIT..HEAD --no-merges)

    # 生成你想要的merge commit message并写入临时文件
    cat > "$1" <<EOF
Merged $MERGED_BRANCH to $CURRENT_BRANCH :
$COMMIT_LIST
EOF
fi

3. 测试效果

现在当你执行git merge [你的目标分支](比如git merge BranchA,假设当前在BranchB),Git会自动生成符合你要求的commit message,然后打开VIM让你确认。比如上次merge后有3条commit,VIM里会显示:

Merged BranchA to BranchB :
Commit A - did A stuff
Commit B - did B stuff
Commit C - did C stuff

你直接输入:wq保存退出就能完成合并,要是想修改内容也可以直接在VIM里编辑后再提交。

小提示

  • 这个钩子只对当前仓库生效,要是其他仓库也想用,把.git/hooks/prepare-commit-msg文件复制过去就行。
  • 如果你的仓库是第一次做merge(没有历史merge记录),脚本会自动取仓库的第一个commit作为起点,列出所有非merge类型的commit。

内容的提问来源于stack exchange,提问作者KlapekApokalipsy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:12:12