Git如何获取HEAD与暂存区之间的所有变更文件名(含重命名场景)
可行解决方案
针对已执行git add、尚未提交的重命名变更,要同时获取新旧两个文件路径,使用以下命令即可:
git diff --name-only --cached --no-renames
执行后输出结果为:
foo.txt bar.txt
参数说明
--cached:指定对比暂存区与当前HEAD提交的差异,适配已执行git add的场景--no-renames:关闭Git默认的重命名自动识别逻辑,会将重命名操作拆解为「删除旧文件」+「新增新文件」两个变更,因此会同时返回两个路径
之前尝试的方案问题说明
git diff --name-only:默认对比工作区与暂存区的差异,如果你已经将全部变更执行了git add,该命令默认无输出,仅当工作区还有未暂存的变更时才会返回部分路径- 带
...的diff语法是用于对比两个提交的共同祖先与末端提交的差异,不适用于未提交的暂存区变更场景 - 提交后才可用的
HEAD~1类对比方案,本质是对比两个已存在的提交记录,自然无法适配未提交的场景
如果重命名后还未执行git add,要获取两个变更路径,去掉--cached参数即可:
git diff --name-only --no-renames
内容的提问来源于stack exchange,提问作者Jalen Morgan
相关产品推荐
相关产品推荐

