Shell 脚本“git diff origin/master --name-only”抛出致命错误:模棱两可的参数‘master’:未知的修订或路径不在工作树中
git diff origin/master --name-only
我的 bitbucket 管道中的命令抛出以下错误。但在我的本地 git bash 中运行良好。
fatal: ambiguous argument 'master': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
我期望它返回自 master brnach 以来更改的文件。使用 --name-only 它仅返回我本地 git bash 中更改文件的名称,但在 bitbuckt 管道中抛出上述错误。
首先:错误消息中提到的是
'master'
,而不是
'origin/master'
。检查您的 bitbucket 管道脚本:您检查的是
master
还是
origin/master
?
其次:根据您设置的选项,您的管道可能根本没有 origin/master ——如果您指示管道仅使用浅克隆,则可能会发生这种情况。
- 要检查是否是这种情况:
让您的管道在某个时候运行
git branch -r
,您将在管道日志中获得远程分支列表。还要检查
origin
的 refspec 设置方式:
git config --get-all remote.orgin.fetch
- 要修复它:
在管道中运行
git fetch origin master
。
如果没有 refspec 指示如何从 origin 获取分支,您可能需要改为运行:
git fetch origin +master:refs/remotes/origin/master
感谢@LeGEC 的回复。我尝试了下面的命令,它成功了,似乎 bitbucket 管道不会像我们的本地管道那样具有
origin/*
这样的层次结构。在装有 VSCode 的本地 Windows11 机器上,我没有观察到任何这些问题,但在 bitbucket 管道上,它显示它弹出了。
$ git diff --name-only master -- VERSION
在我的例子中,bitbucket 管道运行器下载的默认历史深度为 50。如果 diff 中提供的标签或提交较旧,则会出现错误。解决方案是指定更大的深度示例:
- step:
clone:
depth: 200