Фатальный: неоднозначный аргумент "происхождение": неизвестная ревизия или путь не в рабочем дереве

Я часто использовал git diff origin в прошлом.

В другой среде это не работает. Я не знаю, почему.

[email protected]> 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>...]'

Статус:

[email protected]> git status
On branch master
nothing to commit, working directory clean

ПУлЬТОВ:

[email protected]> git remote -v
origin  https://example.com/repos/djangotools (fetch)
origin  https://example.com/repos/djangotools (push)

Версия:

[email protected]> git --version
git version 2.7.4

С "git версия 1.8.1.4" git diff origin работает.

BTW Я вижу тот же самый err msg, если я использую "git diff origin/master"

BTW2, я думаю, что "/master" избыточен. По умолчанию, по умолчанию используется сравнение локальной ветки с той же веткой на удаленном сайте.

Ответ 1

Команда git diff обычно ожидает, что один или несколько хэшей коммита будут генерировать ваш diff. Кажется, вы указываете имя пульта.

Если у вас есть ветвь с именем origin, хеш фиксации на конце ветки был бы использован, если бы вы отправили origin в команду diff, но в настоящее время (без соответствующей ветки) команда приведет к ошибке вы видите. Возможно, вы ранее работали с ветвью с именем origin.

Альтернатива, если вы пытаетесь просмотреть разницу между своей локальной ветвью и веткой на пульте дистанционного управления будет что-то вроде строк:

git diff origin/<branchname>

git diff <branchname> origin/<branchname>

Или другие документированные варианты.

Изменить: Прочитав дальше, я понимаю, что я немного ошибаюсь, git diff origin является сокращением для отличия от головы указанного пульта, поэтому git diff origin= git diff origin/HEAD (сравнить локальную ветвь git с удаленной ветвью?, Почему "начало/HEAD" отображается при запуске "git branch -r" ?)

Похоже, что у вашего источника нет HEAD, в моем случае это потому, что мой пульт - это голый репозиторий, у которого никогда не было HEAD.

Запуск git branch -r покажет вам, установлен ли origin/HEAD, и если да, то какая ветвь указывает на (например, origin/HEAD -> origin/<branchname>).

Ответ 2

Я столкнулся с той же ситуацией, когда такие команды, как 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 для явной установки origin/head
ИЛИ
git remote set-head origin --auto для запроса удаленного и автоматического задания источника/заголовка для удаленной текущей ветки.

Рекомендации:

  • Этот ТАК Ответ
  • Этот SO Comment и связанный с ним ответ
  • git remote --help см. описание set-head
  • git symbolic-ref --help

Ответ 3

Иногда все может быть проще. Я пришел сюда с точной проблемой и перепробовал все предложения. Но позже обнаружил, что проблема была только в том, что локальный путь к файлу был другим, и я был в другой папке. :-)

например -

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

должно было

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

Ответ 4

Это сработало для меня на победу замените REL_PATH_TO_FILE относительным путем к файлу для удаления Удаление конфиденциальных данных из хранилища В документах указан полный путь, но для меня это ошибка -so. Я попробовал rel path, и это сработало.

<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

Ответ 5

Если 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