是否有Git plumbing命令可检查两个提交间文件是否变更?
检查两个提交间指定文件是否变更的Git命令方案
当然有更简洁的Git原生方案,完全不需要借助grep,而且还能通过返回码直接判断结果,甚至有你想要的plumbing类命令可选。
方法1:简洁直观的Porcelain命令
最直接的替代方案是用git diff --quiet,它就是专门用来检查差异是否存在的,返回码直接对应结果:
git diff --quiet HEAD HEAD~4 -- filename
- 返回码
0:文件在两个提交之间没有变更 - 返回码
1:文件在两个提交之间存在变更 - 如果指定文件在其中一个提交里不存在,命令会返回非0错误码(通常是
128),同时输出错误提示
这个命令完全不用处理输出内容,脚本里直接判断退出状态码就行,比你原来的grep方案清爽多了。
方法2:优先选用的Plumbing命令
如果你更倾向于用Git底层的plumbing类命令,git diff-tree是绝佳选择——它是Git用来对比提交树的底层命令,同样支持通过返回码判断差异:
git diff-tree --exit-code HEAD HEAD~4 -- filename
这里的--exit-code参数是核心,它让命令根据差异情况返回对应退出码:
0表示两个提交间该文件无差异1表示文件存在变更
和Porcelain命令一样,这个plumbing命令也不需要处理任何输出,直接依赖返回码就能完成判断,完美符合你的需求。
脚本里的实际用法示例
不管用上面哪种命令,在脚本里都可以直接用if语句判断,比如:
if git diff --quiet HEAD HEAD~4 -- filename; then echo "文件没变化~" else echo "文件已经更新啦!" fi
内容的提问来源于stack exchange,提问作者Chris Maes
相关产品推荐
相关产品推荐

