Фатальный: неоднозначный аргумент "происхождение": неизвестная ревизия или путь не в рабочем дереве
Я часто использовал 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