关于git:fatal:模糊的参数’origin’:未知的修订或路径不在工作树中


fatal: ambiguous argument 'origin': unknown revision or path not in the working tree

我过去经常使用git diff origin

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

1
2
3
4
5
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>...]'

状态:

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

遥控器:

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

版本:

1
2
user@host> git --version
git version 2.7.4

使用"Git版本1.8.1.4"git diff origin作品。

btw如果我使用"git diff origin/master",我会看到相同的错误消息。

btw2,我认为"/master"是多余的。SANE默认值是将本地分支与远程站点上的同一分支进行比较。


git diff命令通常需要一个或多个提交散列来生成差异。您似乎在提供远程文件的名称。

如果您有一个名为origin的分支,那么如果您向diff命令提供origin的话,就会使用分支尖端的commit散列,但是当前(没有相应的分支),该命令将产生您看到的错误。可能是你以前在一个叫origin的分支机构工作。

另一种选择是,如果您试图查看本地分支和远程分支之间的差异,则可以选择以下方式:

江户十一〔四〕号

埃多克斯1〔5〕

或其他有文件证明的变体。

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

听起来您的源站没有头部,在我的例子中,这是因为我的遥控器是一个从未设置头部的裸存储库。

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


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

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

埃多克斯1〔15〕

将refs/remotes/origin/head设置为指向原点/主分支。

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

1
2
* master
  remotes/origin/master

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

1
2
3
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

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

其他信息:

对于任何倾向于在设置和未设置参考/遥控/原点/头部之间进行试验和来回的人,这里有一些例子。

取消设置:埃多克斯1〔18〕

要设置:(除此答案开头显示的方式外,还有其他方式)git remote set-head origin master明确设置原点/头部或git remote set-head origin --auto查询遥控器,并自动设置遥控器当前分支的原点/头。

参考文献:

  • 这就是答案
  • 此so注释及其相关答案
  • git remote --help见设定头说明
  • 埃多克斯1〔22〕


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

EG-

~/myproject/mygitrepo/app/$git diff app/testfile.txt文件

应该是

~/myproject/mygitrepo/app/$git diff testfile.txt文件


这对我来说是成功的用要删除的文件的相对路径替换rel-path-to-u文件从存储库中删除敏感数据医生说是完整的路径-但这对我来说是错误的-所以我尝试了rel-path,结果成功了。

1
<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