我过去经常使用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 origin
或git 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 /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)"
如果您在 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)"