如何配置Git实现提交时未跟踪文件置顶显示?
让Git提交提示中的未跟踪文件显示在顶部的方法
可以通过Git的prepare-commit-msg钩子实现这个需求——这个钩子会在Git生成默认提交消息后、打开编辑器前自动运行,我们可以用它调整提交消息的内容顺序。
步骤1:创建钩子脚本
进入你的Git仓库的.git/hooks目录(如果要全局生效,后续会说明),创建名为prepare-commit-msg的文件,写入以下内容:
#!/bin/sh COMMIT_MSG_FILE="$1" # 提取提交消息中的未跟踪文件区块 UNTRACKED_CONTENT=$(sed -n '/^# Untracked files:/,$p' "$COMMIT_MSG_FILE") # 仅当存在未跟踪文件时执行调整 if [ -n "$UNTRACKED_CONTENT" ]; then # 先从原消息文件中移除未跟踪文件区块 sed -i '/^# Untracked files:/,$d' "$COMMIT_MSG_FILE" # 将未跟踪文件区块插入到分支状态信息之后 # 转义特殊字符避免插入时出错 ESCAPED_CONTENT=$(echo "$UNTRACKED_CONTENT" | sed 's/[\/&]/\\&/g') sed -i '/^# Your branch is up to date with/a '"$ESCAPED_CONTENT"'' "$COMMIT_MSG_FILE" fi
步骤2:赋予脚本执行权限
在终端运行命令,让脚本具备执行权限:
chmod +x .git/hooks/prepare-commit-msg
全局生效(可选)
如果希望所有Git仓库都应用这个设置,按以下步骤操作:
- 创建Git模板目录:
mkdir -p ~/.git-template/hooks
- 将刚才的
prepare-commit-msg脚本复制到该目录:
cp .git/hooks/prepare-commit-msg ~/.git-template/hooks/
- 配置Git使用这个模板目录:
git config --global init.templatedir '~/.git-template'
之后新创建的Git仓库会自动包含这个钩子;已有的旧仓库可以手动复制脚本到.git/hooks目录,或者运行git init(不会覆盖现有仓库内容)来应用模板。
效果验证
当你再次执行git commit .且存在未跟踪文件时,提交提示会变成类似这样的结构:
# Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # On branch provision-device # Your branch is up to date with 'origin/provision-device'. # # Untracked files: # missing.go # # Changes to be committed: # modified: main.go # modified: pkg/foo/bar.go # ...
未跟踪文件的信息会显示在已提交变更的上方,大幅降低被遗漏的概率。
内容的提问来源于stack exchange,提问作者guettli
相关产品推荐
相关产品推荐

