为何在Git仓库根目录执行‘git diff branch1 branch2’命令无效?
为什么在Git仓库根目录执行
git diff branch1 branch2会报错? 这个问题的核心原因其实很直白:你的仓库根目录下,存在一个和其中一个分支名称完全相同的文件或文件夹!
Git在解析命令参数时,会优先检查当前目录下是否存在匹配名称的文件/路径。当你在根目录以外的文件夹执行命令时,当前路径下没有那个和分支同名的文件,所以Git会默认把它当作分支(修订版本)来处理,自然能正常输出差异。但回到根目录时,同名的文件/目录就在当前目录下,Git就犯难了——它分不清你输入的参数(比如错误提示里的capture)到底是要对比的分支,还是要查看的文件路径,于是就抛出了那个"ambiguous argument"的歧义错误。
解决方法有这几个:
- 用
--明确分隔修订版本和路径:这是Git官方提示里推荐的方法,执行命令时加上--,告诉Git前面的参数都是分支/修订版本,后面的才是路径(这里不需要路径,所以--后面空着就行):git diff branch1 branch2 -- - 使用分支的绝对引用:直接指定分支的完整引用路径,让Git明确知道这是分支,不是文件:
git diff refs/heads/branch1 refs/heads/branch2 - 重命名同名文件/目录:如果这个文件/目录的名称不是必须保留的,直接改个名字,从根源上避免这种歧义问题,以后就不用再额外加参数了。
内容的提问来源于stack exchange,提问作者Mikee
相关产品推荐
相关产品推荐

