如何在Git的main分支中检查文件夹或其子文件夹自上次提交后是否被修改
实现Git文件夹修改检查的方法
当然有办法实现这个需求啦!下面我给你分几种常见场景,附上具体的命令和脚本示例,你可以根据自己的实际情况选用:
场景1:检查当前工作区/暂存区与main分支最新提交的差异
如果你想确认本地未提交的修改(包括工作区和暂存区)是否改动了目标文件夹,可以用git diff命令配合--quiet参数来做快速判断:
检查单个文件夹
# 替换成你的目标文件夹路径,比如 ./src/utils if git diff --quiet main HEAD -- <目标文件夹路径>; then echo "这个文件夹在main分支上次提交后没有修改" else echo "该文件夹有修改!开始执行后续操作..." # 在这里添加你的后续操作命令,比如打包、部署等 fi
--quiet参数会让git diff只返回状态码:无差异返回0,有差异返回非0,非常适合脚本里做判断。
检查所有文件夹
如果要批量检查仓库里的所有文件夹,去掉<目标文件夹路径>即可:
if ! git diff --quiet main HEAD; then echo "仓库中有文件夹/文件在main上次提交后被修改,执行后续操作..." # 后续操作 fi
场景2:检查本地分支提交中,是否有在main之后修改目标文件夹的记录
如果你的修改已经提交到本地分支,想确认这些提交里有没有改动目标文件夹,可以用git log来筛选:
# 替换成目标文件夹路径 if [ -n "$(git log main..HEAD -- <目标文件夹路径>)" ]; then echo "该文件夹在main分支上次提交后有提交记录,执行后续操作..." else echo "没有针对该文件夹的提交修改" fi
main..HEAD表示只查看当前分支比main分支多出来的提交,加上文件夹路径后,只会显示修改过该文件夹的提交。
场景3:对比远程main分支的最新版本
如果需要先拉取远程main的最新提交,再对比本地的修改,可以这样做:
# 先拉取远程main分支的最新代码(不会影响本地工作区) git fetch origin main # 对比本地当前分支和远程main的差异 if ! git diff --quiet origin/main HEAD -- <目标文件夹路径>; then echo "本地文件夹与远程main最新版本有差异,执行后续操作..." # 后续操作 fi
补充说明
- 如果你用的是Windows环境,上面的bash脚本可以改成PowerShell语法,比如:
if (-not (git diff --quiet main HEAD -- <目标文件夹路径>)) { Write-Host "文件夹有修改,执行后续操作" # 你的后续操作 } - 注意文件夹路径的写法,尽量用相对路径,确保Git能正确识别目标目录。
内容的提问来源于stack exchange,提问作者Rishi
相关产品推荐
相关产品推荐

