Подтвердить что ты не робот

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 #) $] 

В чем проблема?

4b9b3361

Ответ 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.