83

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

cd ~
mkdir test
cd 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 #) $]

有什么问题?

4

8 回答 8

39

正如其他人指出的那样,此消息来自您的 shell 提示符。问题是在新创建的存储库中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

在为我的 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 ...
}
于 2012-10-14T23:16:17.873 回答
36

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

对于那些仍然面临这个问题的人,我能够解决它如下:

git commit --allow-empty -n -m "Initial commit."
于 2018-07-25T21:09:21.640 回答
8

我在创建新 Git 项目时在终端中进行自定义显示时遇到了这个问题(我的分支显示在路径名之前,例如 <branch>:/current/path)。

我需要做的就是对我的主分支进行初始提交,以使这条消息消失。

于 2014-04-26T17:47:35.293 回答
4

在我的情况下,它是克隆深度(我设置1并忘记了它)

詹金斯正在运行:

git rev-parse 2865c1ce8248de835b5a3fbfcce09e7346d5e3ea^{commit}

(该提交是 HEAD 后面的一些提交。)

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

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

于 2021-07-22T15:20:21.973 回答
2

Jacob Helwig在他的回答中提到:

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

来自Jeff King ( peff)的提交 62f162f应该会提高git rev-parseGit 1.9/2.0 (Q1 2014) 中的健壮性(除了提交 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>...]'
于 2014-01-07T08:40:32.147 回答
1

此问题的根源在于您要查找的参考文献之一不存在。

这可能是因为:

  1. 您正在寻找的提交尚未发生(因此围绕新存储库的各种答案不起作用)
  2. 您使用浅签出(--depth = 0、bare 或 mirrored)克隆了存储库
  3. 您签出了不包括标签和/或分支的存储库,并且您正在按名称查找该标签/分支

...可能还有其他我不知道的原因。就我而言,结帐已满,但已排除标签。跑步:

git fetch --all --tags

清除它。

于 2021-09-16T20:49:40.583 回答
1

我遇到了这个问题,这里的答案都没有帮助我。问题出在使用git rev-parse. 该脚本正在检查当前分支是否为master. 我改为git branch --show-current在脚本中使用它,问题就消失了。如果错误消息告诉您什么功能遇到了问题,这将很有帮助。

于 2021-12-01T21:36:42.580 回答
-8

我有同样的问题,我在安装CocoaPods后通过“pod setup”解决了这个问题。

于 2019-08-22T05:54:54.173 回答