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

Ubuntu 22.04下实现git_just_added命令筛选末次提交新增文件

实现git_just_added命令,判断文件是否为HEAD最后一次提交的新增文件

首先先修正你提供的Bash脚本语法错误,原脚本存在循环结构缺失、条件判断语法错误等问题,修正后的脚本框架如下:

for f in $(find -name "abc.txt")
do
    if git_just_added "$f"
    then
        echo "$f"
    fi
done

实现git_just_added的两种方式

方式1:定义为Shell函数

在当前脚本开头或者你的Bash配置文件(如~/.bashrc)中添加以下函数:

git_just_added() {
    # 检查参数数量是否合法
    if [ $# -ne 1 ]; then
        return 1
    fi
    local target_file="$1"
    # 筛选最后一次提交中新增的文件,精确匹配目标文件
    git diff --name-only --diff-filter=A HEAD~1 HEAD | grep -Fxq "$target_file"
}
  • 核心逻辑:git diff --name-only --diff-filter=A HEAD~1 HEAD 会列出当前HEAD与上一次提交之间新增的所有文件;grep -Fxq 用于精确匹配文件名,静默返回匹配结果(匹配成功返回0,失败返回1),正好满足if判断的需求。

方式2:写成独立可执行脚本

  1. 创建脚本文件(命名为git_just_added):
#!/bin/bash
if [ $# -ne 1 ]; then
    exit 1
fi
target_file="$1"
git diff --name-only --diff-filter=A HEAD~1 HEAD | grep -Fxq "$target_file"
  1. 赋予执行权限:
chmod +x git_just_added
  1. 将脚本所在目录加入系统PATH,或直接移动到/usr/local/bin下,即可全局调用该命令。

兼容首次提交场景

如果仓库是首次提交(没有HEAD~1节点),需要修改逻辑适配:

git_just_added() {
    if [ $# -ne 1 ]; then
        return 1
    fi
    local target_file="$1"
    # 判断是否存在上一次提交节点
    if git rev-parse --verify HEAD~1 >/dev/null 2>&1; then
        git diff --name-only --diff-filter=A HEAD~1 HEAD | grep -Fxq "$target_file"
    else
        # 首次提交时,直接检查文件是否在当前提交的文件列表中
        git ls-tree --name-only HEAD | grep -Fxq "$target_file"
    fi
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:52:09