致命:模棱两可的参数"起源":未知修订或路径不在工作树中



我过去经常使用git diff origin

在不同的环境中,它不起作用。我不知道为什么。

user@host> git diff origin
fatal: ambiguous argument 'origin': unknown revision or path 
not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

地位:

user@host> git status
On branch master
nothing to commit, working directory clean

遥控器:

user@host> git remote -v
origin  https://example.com/repos/djangotools (fetch)
origin  https://example.com/repos/djangotools (push)

版本:

user@host> git --version
git version 2.7.4

使用"git 版本 1.8.1.4"git diff origin工作。

顺便说一句,如果我使用"git diff origin/master",我会看到相同的错误消息

顺便说一句,我认为"/master"是多余的。理智的默认设置是将本地分支与远程站点上的同一分支进行比较。

git diff命令通常需要一个或多个提交哈希来生成差异。您似乎正在提供遥控器的名称。

如果您有一个名为origin的分支,如果您向 diff 命令提供了origin,则会使用该分支尖端的提交哈希,但当前(没有相应的分支)该命令将产生您看到的错误。可能是您以前使用名为origin的分支。

另一种方法是,如果您尝试查看本地分支与远程分支之间的差异,则

大致如下:git diff origin/<branchname>

git diff <branchname> origin/<branchname>

或其他记录在案的变体。

编辑:进一步阅读后,我意识到我有点错了,git diff origin是与指定遥控器的头部不同的简写,所以git diff origin=git diff origin/HEAD(比较本地 git 分支和远程分支?,为什么在运行"git 分支 -r"时显示"origin/HEAD"?

听起来您的源没有 HEAD,就我而言,这是因为我的遥控器是一个从未设置过 HEAD 的裸存储库。

运行git branch -r将显示是否设置了origin/HEAD,如果是,它指向哪个分支(例如origin/HEAD -> origin/<branchname>)。

我遇到了同样的情况,git diff origingit diff origin master等命令产生了问题中报告的错误,即Fatal: ambiguous argument...

为了解决这种情况,我运行了命令

git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master

将 refs/remotes/origin/HEAD 设置为指向源/主分支。

在运行此命令之前,git branch -a的输出为:

* master
remotes/origin/master

运行命令后,错误不再发生,git branch -a的输出为:

* master
remotes/origin/HEAD -> origin/master
remotes/origin/master

(其他答案已经确定错误的来源是未将 HEAD 设置为原点。但我认为提供一个可用于修复相关错误的命令很有帮助,尽管这对某些用户来说可能很明显。


附加信息:

对于任何倾向于尝试并在设置和取消设置refs/remotes/origin/HEAD之间来回切换的人,这里有一些例子。

要取消设置:
git remote set-head origin --delete

设置:
(除了本答案开头所示的方式之外的其他方法)
git remote set-head origin master显式
设置原点/头或
git remote set-head origin --auto查询远程并自动将原点/头设置为遥控器的当前分支。

引用:

  • 这个答案
  • 此 SO 注释及其相关答案
  • git remote --help查看机头说明
  • git symbolic-ref --help

对于那些在 CI/CD 上遇到此错误的人,在运行pip install pyflakes diff-cover后立即在我的 GitHub 操作 CI/CD 工作流中添加以下行对我有用:

git fetch origin master:refs/remotes/origin/master

这是 diff-cover github 存储库中解决方案的一个片段:

解决方案:差异封面匹配覆盖率 XML 报告中的源文件与 git 差异中的源文件。因此,这很重要 文件的相对路径匹配。如果您正在使用 coverage.py 生成覆盖率 XML 报告,然后确保 从同一工作目录运行 diff-cover。

我在下面的链接上得到了解决方案。这是一个记录在案的diff-cover错误。

https://diff-cover.readthedocs.io/en/latest//README.html https://github.com/Bachmann1234/diff_cover/blob/master/README.rst

希望这有帮助:-)。

有时事情可能更简单。我带着确切的问题来到这里并尝试了所有建议。但后来发现问题只是本地文件路径不同,而我在不同的文件夹中。:-)

例如 -

~/myproject/mygitrepo/app/$ git diff app/TestFile.txt

应该是

~/myproject/mygitrepo/app/$ git diff TestFile.txt

如果origin指向磁盘上的裸存储库,则如果该目录已被移动(即使您更新了工作副本的远程),也会发生此错误。例如

$ mv /path/to/origin /somewhere/else
$ git remote set-url origin /somewhere/else
$ git diff origin/master
fatal: ambiguous argument 'origin': unknown revision or path not in the working tree.

从新origin中提取一次可以解决问题:

$ git stash
$ git pull origin master
$ git stash pop
  • 删除 opt/homebrew 文件夹cd /optsudo rm -rf homebrew

  • 安装自制软件:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

如果您是第一次安装自制软件并遇到此错误,请在第二次尝试时首先清除,请先删除/opt/homebrew文件夹。

运行以下设置,然后您就可以使用 brew

了运行 unintsall 脚本 :-/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"

设置 Git 压缩 :-git config --global core.compression 0

设置 Git 缓冲区大小:-git config --global http.postBuffer 1048576000

运行安装脚本:-/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

如果您在 GitHub 操作中遇到此问题,则需要添加:

fetch-depth: 0

所以这一步是

steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0

欲了解更多信息,请查看 https://github.com/actions/checkout/issues/296

这对我赢了有用 将REL_PATH_TO_FILE替换为要删除的文件的相对路径 从存储库中删除敏感数据 文档说完整路径 - 但这对我来说是错误的 - 所以我尝试了 rel 路径并且它起作用了。

<from the repo dir>git filter-branch --force --index-filter "git rm --cached --ignore-unmatch REL_PATH_TO_FILE" --prune-empty --tag-name-filter cat -- --all

git fetch开头

git 差异主源/主

仅此而已。

如果您使用depth=1获取/克隆,可能会发生这种情况。因此,您可能还需要从远程获取目标分支:

git remote set-branches origin 'your_target_branch'
git fetch --depth=1
// show local branches to confirm
git branch -a
// git diff ....

(注意,用你需要的任何东西替换your_target_branch,你甚至可能需要master)

尝试取消与:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)"

然后,使用以下命令进行安装:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

最新更新