如何用git diff比较同一提交的不同修订补丁?
对比Git Amend前后提交的补丁差异
要实现你要的功能,核心是先定位到amend前后的两个提交,再用git diff做对比,以下是具体方案:
核心命令逻辑
和你原来检测分支差异的思路完全一致,只需要把对比的分支换成amend前后的提交即可:
1. 检测指定路径是否有变更并输出提示
git diff --quiet HEAD@{1} HEAD -- file_path/* || echo "Changed"
- 逻辑说明:
HEAD@{1}是从Git的reflog里取出当前分支的上一个状态(也就是你执行git commit --amend之前的原提交A),HEAD是修订后的新提交B。如果指定路径下有文件变更,git diff --quiet会返回非0值,触发||后面的echo输出"Changed";如果没有变更,命令直接返回0,无输出。
2. 直接列出所有变更的文件
如果想看到具体是哪些文件变了,不用--quiet,换成--name-only参数:
git diff --name-only HEAD@{1} HEAD -- file_path/*
这个命令会直接输出指定路径下所有在amend前后有变更的文件路径。
额外注意事项
- 如果距离amend操作过了很久,reflog可能被清理(Git默认会保留90天的reflog记录),这时候可以在执行
git commit --amend前先手动记录原提交的哈希:# amend前先保存原提交哈希 old_commit=$(git rev-parse HEAD) # 执行amend操作 git commit --amend # 之后对比时用保存的哈希 git diff --quiet $old_commit HEAD -- file_path/* || echo "Changed" ORIG_HEAD也可以用来指代amend前的提交,但它只在刚执行完amend后有效,后续执行其他Git命令可能会覆盖ORIG_HEAD的值,所以HEAD@{1}的通用性更强。
内容的提问来源于stack exchange,提问作者bojee
相关产品推荐
相关产品推荐

