GIT fatal: неоднозначный аргумент "HEAD": неизвестная ревизия или путь не в рабочем дереве
Я пытаюсь инициализировать новый репо GIT из Debian (фактически виртуальная машина VM на Virtualbox, установленная и запущенная на Mac OS X):
[[email protected]:~ $] mkdir test
[[email protected]:~ $] cd test
[[email protected]:test $] git init
Initialized empty Git repository in /home/david/test/.git/
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
[[email protected]:test (master #) $]
В чем проблема?
Ответы
Ответ 1
Как указывали другие, это сообщение поступает из командной строки. Проблема в том, что в недавно созданном репозитории HEAD
(.git/HEAD
) указывает на ref, который еще не существует.
% git init test
Initialized empty shared Git repository in /Users/jhelwig/tmp/test/.git/
% cd test
% cat .git/HEAD
ref: refs/heads/master
% ls -l .git/refs/heads
total 0
% git rev-parse HEAD
HEAD
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
Похоже, что rev-parse
используется без достаточной проверки правильности проверки. После создания первого коммита .git/refs/heads
выглядит немного иначе, а git rev-parse HEAD
больше не будет работать.
% ls -l .git/refs/heads
total 4
-rw------- 1 jhelwig staff 41 Oct 14 16:07 master
% git rev-parse HEAD
af0f70f8962f8b88eef679a1854991cb0f337f89
В функции, которая обновляет информацию Git для остальной части приглашения моей оболочки (сильно измененная версия темы приглашения wunjo для ZSH), у меня есть следующее, чтобы обойти это:
zgit_info_update() {
zgit_info=()
local gitdir=$(git rev-parse --git-dir 2>/dev/null)
if [ $? -ne 0 ] || [ -z "$gitdir" ]; then
return
fi
# More code ...
}
Ответ 2
У меня возникла эта проблема при создании пользовательского экрана в моем терминале при создании нового проекта git (у меня есть отображение ветвей перед именем пути, например:/current/path). Все, что мне нужно было сделать, это выполнить мою первоначальную фиксацию в моей главной ветке, чтобы это сообщение исчезло.
Ответ 3
Я обычно использую git на моей машине с Linux, но на работе я должен использовать Windows. У меня была такая же проблема при попытке зафиксировать первый коммит в среде Windows.
Для тех, кто все еще сталкивается с этой проблемой, я смог решить ее следующим образом:
$ git commit --allow-empty -n -m "Initial commit".
Ответ 4
Jacob Helwig упоминает в своем ответе, что:
Похоже, что rev-parse используется без достаточной проверки ошибок перед использованием
Commit 62f162f от Джефф Кинг (peff
) должен повысить устойчивость git rev-parse
в Git 1.9/2.0 (Q1 2014) (кроме commit 1418567):
В случаях, когда мы не сопоставляем (например, "doesnotexist..HEAD
" ), мы хотели бы попробовать обработать аргумент как имя файла.
try_difference()
получает это право и всегда размывает в этом случае.
Однако try_parent_shorthand()
никогда не стирает, что приводит к неправильным сообщениям об ошибках или даже к неправильным результатам:
$ git rev-parse foobar^@
foobar
fatal: ambiguous argument 'foobar': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
Ответ 5
У меня возникла такая же проблема, когда я пытался жестко reset выполнить коммит, который не существует.
Ответ 6
У меня была та же проблема, и я решил ее "установкой pod" после установки cocoapods.