不在工作树中的未知修订或路径

我过去经常使用 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工作。

顺便说一句

BTW2,我认为“/主”是多余的。合理的默认设置是将本地分支与远程站点上的相同分支进行比较。

213214 次浏览

git diff命令通常需要一个或多个提交哈希来生成 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 Branch-r”时会显示“ source/HEAD”?)

听起来好像你的起源没有一个 HEAD,在我的情况下,这是因为我的远程是一个裸仓库,从来没有一个 HEAD 设置。

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

这招对我赢了很管用 用要删除的文件的相对路径替换 REL _ PATH _ TO _ FILE 从存储库中删除敏感数据 医生说是完全路径,但是对我来说是错误的,所以我尝试了 Relpath,它起作用了。

<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

有时候事情可能会简单些。我带着完全相同的问题来到这里,尝试了所有的建议。但后来发现,问题只是本地文件路径不同,我在一个不同的文件夹。:-)

例如

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

应该是的

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

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

为了解决这个问题,我运行了命令

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

设置参考/远程/原点/HEAD 以指向原点/主分支。

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

* master
remotes/origin/master

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

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

(其他的答案已经确定错误的源头是 HEAD 没有被设置为原点。但是我认为提供一个命令是有帮助的,这个命令可以用来修复有问题的错误,尽管对于某些用户来说这可能是显而易见的。)


附加信息:

对于那些倾向于实验并在设置和取消设置参考/远程/原点/HEAD 之间来回切换的人来说,这里有一些例子。

取消:
git remote set-head origin --delete

设定:
(除了本答案开头所示的方法外,还有其他方法)
git remote set-head origin master显式设置起点/头
或者
git remote set-head origin --auto查询远程并自动设置起点/HEAD 到远程的当前分支。

参考文献:

  • 这是 回答我
  • 这个 所以说及其相关的答案
  • 参见设定头说明
  • git symbolic-ref --help

如果 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

对于那些在 CI/CD 上遇到这个错误的人,在运行 pip install pyflakes diff-cover之后,在我的 GitHub Actions CI/CD 工作流上添加以下代码对我很有用:

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

下面是来自 diff-cover github repo 的解决方案片段:

解决方案 : diff-cover 匹配覆盖率 XML 报告中的源文件 在 git diff 中包含源文件 文件的相对路径是否匹配 Py 生成覆盖率 XML 报告,然后确保 从同一个工作目录进行伪装。

我得到的解决方案在下面的链接。这是一个文档化的 diff-cover错误。

Https://diff-cover.readthedocs.io/en/latest//readme.html Https://github.com/bachmann1234/diff_cover/blob/master/readme.rst

希望这能有所帮助。

  • 删除选项/自制文件夹 cd /opt, sudo 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)"

尝试卸载:

/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)"