GIT致命:模糊的论点'HEAD':未知的修订或路径不在工作树中

时间:2012-09-04 16:44:53

标签: macos git virtualbox

我正在尝试从Debian初始化一个新的GIT仓库(实际上是Virtualbox上的VM,在Mac OS X上安装并运行):

[david@server-VM-001:~ $] mkdir test
[david@server-VM-001:~ $] cd test
[david@server-VM-001: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
[david@server-VM-001:test  (master #) $] 

有什么问题?

6 个答案:

答案 0 :(得分:26)

正如其他人所指出的,这条消息来自你的shell提示符。问题是在新创建的存储库中HEAD.git/HEAD)指向尚不存在的引用。

% 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

在更新我的shell提示的其余部分(ZSH的wunjo提示主题的大量修改版本)的Git信息的函数中,我有以下内容来解决这个问题:

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 ...
}

答案 1 :(得分:7)

在创建新的git项目时,我的终端中有自定义显示时出现此问题(我在路径名之前显示分支显示,例如:/ current / path)。我需要做的就是完成对我的主分支的初始提交,以使此消息消失。

答案 2 :(得分:5)

我通常在Linux机器上使用git,但是在工作中我必须使用Windows。尝试在Windows环境中提交第一次提交时,我遇到了同样的问题。

对于那些仍然面临此问题的人,我可以通过以下方式解决它:

$ git commit --allow-empty -n -m "Initial commit".

答案 3 :(得分:2)

Jacob Helwig提到in his answer

  

看起来正在使用rev-parse而没有在事前进行足够的错误检查

来自Commit 62f162f

Jeff King (peff)应该会改善git rev-parse在Git 1.9 / 2.0(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>...]'

答案 4 :(得分:0)

我遇到了同样的问题,并在安装了cocoapods之后通过“ pod设置”解决了该问题。

答案 5 :(得分:0)

就我而言,它是克隆深度(我设置为 1 并忘记了它)

Jenkins 正在运行:

git rev-parse 2865c1ce8248de835b5a3fbfcce09e7346d5e3ea^{commit}

(那个提交是 HEAD 后面的几个提交)

当使用 --depth=1 克隆/获取时,我会在运行 git rev-parse 时收到此错误。使用更大的数字(或没有 --depth)进行克隆时,git rev-parse 工作正常。

这可能与 OP 的命令略有不同,但可能对某人有所帮助。