开发者问题收集

Shell 脚本“git diff origin/master --name-only”抛出致命错误:模棱两可的参数‘master’:未知的修订或路径不在工作树中

2023-05-24
337

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 管道中抛出上述错误。

3个回答

首先:错误消息中提到的是 '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
2023-05-25

感谢@LeGEC 的回复。我尝试了下面的命令,它成功了,似乎 bitbucket 管道不会像我们的本地管道那样具有 origin/* 这样的层次结构。在装有 VSCode 的本地 Windows11 机器上,我没有观察到任何这些问题,但在 bitbucket 管道上,它显示它弹出了。

$ git diff --name-only master -- VERSION
Sai Teja Makani
2023-05-25

在我的例子中,bitbucket 管道运行器下载的默认历史深度为 50。如果 diff 中提供的标签或提交较旧,则会出现错误。解决方案是指定更大的深度示例:

  - step:
      clone:   
        depth: 200
Julián Arias
2023-12-28