Git Diff致命错误:模糊参数未知修订版或路径不在工作树中。

8
我正在我的生产代码中运行git fetch origin,然后尝试使用origin/master与我的当前分支进行Git差异比较。 在运行命令时,我遇到了以下错误:

fatal: ambiguous argument unknown revision or path not in working tree

请查看下面的命令和实际错误。
尝试的命令:
git fetch origin
git diff --name only release/test origin/master

预期输出:

git diff should work

实际输出:

[localhost] local: git diff --name-only release/test origin/master |   ambiguous argument 'release/test': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

我们如何纠正Git diff命令的问题?

2
“release/test” 在你的代码库中实际上是一个分支吗?如果你运行 “git show release/test” 会发生什么? - Amber
是的,该分支是我的代码库的一部分。 - Manigandan Thanigai Arasu
1
如果在命令的末尾添加 --git diff --name-only release/test origin/master --),会发生什么? - Amber
尝试执行 git diff --name-only release/test origin/master 时,它会抛出致命错误:bad revision 'releast/test'。-- @Amber - Manigandan Thanigai Arasu
好的,如果你执行 git fetch release 会发生什么?如果可以的话,再试一下 diff - Amber
1
这是一个打字错误吗?:--name only - Matthias
3个回答

2
解决方法是首先检出分支,然后 git diff 命令将起作用。
$ git diff --name-only master...release/v1.1

fatal: ambiguous argument 'master...release/v1.1': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'


$ git diff --name-only master release/v1.1 --

fatal: bad revision 'release/v1.1'


$ git checkout release/v1.1

Switched to a new branch 'release/v1.1'
Branch 'release/v1.1' set up to track remote branch 'release/v1.1' from 'origin'.


$ git diff --name-only master release/v1.1

foo
bar

1
看起来那行得通,因为你没有 release/v1.1 的本地副本。另一种选择是使用 "origin/release/v1.1"。 - Poco

2
您需要确保没有以下情况:
  • Git仓库文件夹中的路径与分支名称匹配,例如文件夹release/test
  • 或者按照noted by philant ,分支名称与待比较文件路径相符。
  • 或者标签名称与分支名称相匹配:git tag -l (列出release/test
如果添加--,可以确保这两个分支名称被解释为文字而非选项。在这种情况下(git diff),它们将被视为路径,而不是提交或其他git diff选项。
git diff --name-only release/test origin/master --

在你的情况下,除非你实际上有名为release/testorigin/master的路径/文件夹,否则此操作将失败。
因此,git diff [<options>] <commit> <commit>仍然是正确的语法。
您只需要确保没有已被命名为这两个提交之一的路径或标签。

对于 git diff 命令,双破折号 -- 应该用于将提交记录与路径分开,而不是将选项与参数分开。详见官方文档 - phd
@phd同意。我相应地编辑了答案。我记得https://dev59.com/iXM_5IYBdhLWcg3w3nRs#1192194。 - VonC
我执行 git diff --name-only release/test origin/master -- 时出现了错误 -> 致命错误:版本 'release/test' 错误。 - Manigandan Thanigai Arasu
@ManigandanThanigaiArasu,你能检查一下git tag -l的输出吗?你看到里面有release/test吗? - VonC
使用代码:^local('git tag -l')时,出现了缩进错误,意外的缩进。 - Manigandan Thanigai Arasu
显示剩余2条评论

0
在执行git diff ...之前,请使用git fetch origin master:refs/remotes/origin/master

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接