如何获取等效于git diff A...HEAD且包含本地暂存未暂存修改的结果
解决方案
你需要的对比逻辑本质是:将git diff A...HEAD使用的「A与HEAD的共同祖先」作为对比基准,把对比终点从HEAD改为当前包含所有未提交改动的工作区即可,具体实现方案如下:
通用兼容方案(所有Git版本适用)
执行命令:
git diff $(git merge-base A HEAD)
git merge-base A HEAD会自动获取提交A和当前HEAD的最近共同祖先,也就是git diff A...HEAD的原始对比基准- 直接和该基准提交做diff时,Git默认会包含本地所有暂存、未暂存的修改,完全覆盖你需要的两个对比场景
简化方案(Git 2.20及以上版本适用)
高版本Git提供了专门的参数省略手动查找共同祖先的步骤,执行命令效果和上面完全一致:
git diff --merge-base A
可选扩展
如果后续你需要只包含暂存改动、排除未暂存改动,只需要在命令后添加--cached参数即可:
# 通用版 git diff --cached $(git merge-base A HEAD) # 高版本简化版 git diff --merge-base --cached A
内容的提问来源于stack exchange,提问作者Zachary Turner
相关产品推荐
相关产品推荐

