使用git diff对比origin/master与本地时,a和b分别代表什么?
Git Diff输出中
a/和b/的指代说明 你的猜测方向完全正确,我来给你拆解清楚细节:
a/assets/thing.h指代的是命令中指定的左侧对比版本,也就是你这里的origin/master分支。由于该分支中不存在assets/thing.h文件,所以diff输出里显示它来自/dev/null(空状态)。b/assets/thing.h指代的是右侧的对比版本,也就是你本地当前的状态。因为你之前执行过git add将整个目录添加到暂存区,这里的“当前状态”实际是你的暂存区(staging area)中的文件状态——如果工作区和暂存区内容一致,两者效果等价,但由于你已执行git add,此处优先取暂存区的版本。
Git Diff对比逻辑补充
当你执行git diff <commit/branch> -- <path>格式的命令时,Git的对比规则是固定的:
- 你指定的第一个版本(如本例的
origin/master)始终作为左侧,用a/前缀标识; - 未明确指定的右侧默认是本地当前状态:
- 不加
--cached参数时,对比的是指定版本与本地工作区; - 加上
--cached参数时,对比的是指定版本与本地暂存区。
- 不加
在你的场景中,因为已执行git add使工作区与暂存区内容一致,diff输出清晰验证了你的担忧:origin/master中不存在该文件,而你本地误将其作为新文件暂存,确实需要通过git rm来处理。
内容的提问来源于stack exchange,提问作者CCJ
相关产品推荐
相关产品推荐

