致命错误:默认修订版本“HEAD”无效

82

我使用GIT作为我的源代码控制系统。我们在Linux服务器上安装了它。Tortoise GIT是我的Windows客户端。

今天早上我提交了一些更改,并打了标签。然后,我将本地代码库推送到远程代码库。

当我进入我的Unix服务器上的代码库并输入git log时,我看到:

fatal: bad default revision 'HEAD'

但是,当我使用我的Windows TortoiseGit客户端执行show log时,历史记录如下图所示...

---
SHA-1: f879573ba3d8e62089b8c673257c928779f71692

Initial drop of code

---
master origin/master oms-phase4-v1.0.0
SHA-1: 56176dbe45e6175b18c9f44533828806c63142ab

OMS Phase 4 - Added OMS Cust. Order No. to EDI Purchase Order Header screens

Tag Info

object 56176dbe45e6175b18c9f44533828806c63142ab
type commit
tag oms-phase4-v1.0.0
tagger Richard Riviere <richard.riviere@myer.com.au> 1364338495 +1100

---
SHA-1: 0000000000000000000000000000000000000000

Working dir changes
0 files changed

---

代码肯定已经被推送到远程仓库。我能够通过将仓库克隆到另一个目录来检查。

有人知道为什么我收到“fatal: bad default revision 'HEAD'”的错误提示吗?

p.s. 这是一个裸仓库,但我创建了其他裸仓库,它们没有出现这个问题。


你有git远程仓库吗? - pktangyue
注意:Git 2.6(2015年第三/第四季度)将提供更有意义的消息。请参见下面的我的答案 - VonC
1
对于那些在做了一些傻事之后碰到这个问题的人,我有一个提示。就像我一样,在克隆新存储库后,我浪费了很多时间。我在我克隆的目录中运行git log命令。实际上,我应该cd到克隆后出现的目录中。 - Sandeepan Nath
这已经是第二次在我关闭电脑后,git损坏了我的代码库。使用mercurial从未发生过这种情况,太糟糕了。 - Milan
显示剩余2条评论
9个回答

60

只需进行首次提交,错误就会消失:

git commit -m "initial commit"

1
谢谢,这真的帮了我很多。 - Zohra Khan
1
感谢您的出色回答 (-:在创建存储库后,它与主题相匹配,并且是解决我的问题的简单方法。 - Beauty
对我有用。导致此错误的原因似乎是需要运行git config --global user.email和git config --global user.name。 - chribonn

41
当我正在的分支从存储库中删除,但我所在的工作区没有更新时,就会发生这种情况。(我们有一个工具,可以使用符号链接从同一存储库创建多个git“工作区”。)
如果"git branch"没有将任何分支标记为当前分支,请尝试执行:
git reset --hard <<some branch>>

我尝试了许多方法,直到找到了这个。


1
这对我来说刚好解决了问题 :) - Victor Martins
1
我重命名了我所在的分支,然后出现了“错误的默认修订版本”。这个方法对我有用,谢谢! - Dan Bechard

25

还没有提交?

如果一个分支没有任何提交记录,那么它就是孤儿分支。


嗨。感谢回复。请看我在下面的回复中提供的答案。我非常确定我已经进行了推送。 - Richie

19

你的仓库是你的,里面发生了什么都归你管,直到你推送、克隆或获取(fetch)操作。当你删除了你的Windows仓库时,那个文件夹不仅代表着你的本地仓库,它实际上就是你的本地仓库,你删除了其中所有未被推送、获取或克隆的内容。

编辑:啊,好的,我想我明白问题出在哪里了:你向你的Linux仓库推送了代码,但它不是裸仓库(bare),而且你从未在其中工作过。

不要使用git log,而是用git log --all。或者使用git checkout分支名称

然后尝试在你的Linux机器上本地克隆仓库;我敢打赌它会起作用的。你在Linux上用什么方法服务于你的仓库?尝试进入其.git目录并运行git daemon --base-path=. --export-all,如果它只是停在那里,那就回到你的Windows机器上,尝试git clone git://your.linux.box.ip,如果daemon抱怨不能绑定,则将--port=54345添加到daemon的调用中,并将:54345添加到克隆网址中。


抱歉,我忘了提到我已经将代码推送到远程仓库。我知道推送成功了,因为我可以在GitWeb中看到更改。因此,我认为你上面说的不正确。 - Richie
根据之前的评论,我的远程仓库中肯定有代码。但出于某种原因,Git不允许我克隆它,而是给了我那个错误。这听起来对吗?我该如何解决它? - Richie
很高兴听到您已经推送了代码。鉴于可能性不是太多,我尝试将代码推送到一个初始化的Git repo,并尝试运行log命令以重现您所描述的git log问题症状。 - jthill
无论发生了什么事,看起来我已经损坏了我的代码库。我一直在按照指南尝试恢复我的代码库(http://git-scm.com/book/en/Git-Internals-Maintenance-and-Data-Recovery)。然而,列出的许多命令对我来说都不起作用,只会出现错误。我想重新开始这个代码库可能会更快。有趣的是,GitWeb没有问题。它仍然列出代码等。我想知道为什么。 - Richie
所以我昨天从头开始。我再次检查了我的代码并标记了一些更改。当我尝试在Unix上发出“git log”命令时,我仍然收到致命错误:默认修订版本'HEAD'无效。但是当我在Windows上使用tortoiseGit并执行“show log”时,日志看起来很好,并显示了我的所有历史记录。我对这个错误感到非常困惑。有什么想法吗?我将修改我的问题以反映我刚刚尝试的内容 - Richie
显示剩余6条评论

7
注意:Git 2.6 (2015年Q3/Q4)将“最终”提供更有意义的错误消息。
请参见提交ce11360(由Jeff King (peff)于2015年8月29日提交)。 (由Junio C Hamano -- gitster --合并于提交699a0f3,2015年9月2日)

log:更清晰地诊断空HEAD

如果您初始化或克隆一个空仓库,则运行“git log”的初始消息不太友好:

$ git init
Initialized empty Git repository in /home/peff/foo/.git/
$ git log
fatal: bad default revision 'HEAD'

让我们检测这种情况并编写更友好的消息:
$ git log
fatal: your current branch 'master' does not have any commits yet

我们还会检测“HEAD”指向损坏引用的情况;这种情况应该更加罕见,但很容易看出来。
请注意,我们并没有诊断所有可能的情况。我们依赖于resolve_ref,这意味着我们无法获得有关复杂情况的信息。例如,“--default master”将使用dwim_ref查找“refs/heads/master”,但我们只注意到“master”不存在。
同样,像“--default HEAD^2”这样的复杂sha1表达式将不会解析为引用。
但这没关系。在这些情况下,我们会回退到通用错误消息,并且它们不太可能被使用。
捕获空的或损坏的“HEAD”可以改善常见情况,而其他情况则没有退化。

6
请确保分支“master”存在!这不仅仅是一个名称。
在创建一个空白的裸库之后,将名为“dev”的分支推送到该库中,并尝试在裸库中使用git log时,我遇到了这个错误。有趣的是,git branch 知道dev是唯一的现有分支(所以我认为这是一个git bug)。
解决方法:我重复了这个过程,这次在推送到裸库之前,在工作库中将“dev”重命名为“master”。成功!

这发生在我使用scp复制分支后。 - earthmeLon

2

.git/HEAD 引用一个不存在的分支时,似乎会出现这种情况。我在一个 .git/refs/heads 中没有任何内容的仓库中遇到了这个错误。我不知道这个仓库是如何处于这种状态的,我是从离开公司的某个人手中接管的。


跟我发生了同样的事情,只不过我的文件在蓝屏时损坏了。我只是用当前头部的SHA-1哈希值替换了它,现在一切似乎都正常了。 - the swine

0

我不认为这是 OP 的问题,但如果你和我一样,在尝试玩弄 git plumbing 命令(update-indexcat-file)时遇到了这个错误,而且在第一次根本没有提交任何东西的情况下。所以尝试提交一些东西(git commit -am 'First commit'),你的问题应该就解决了。


-1

我遇到了同样的错误,但无法解决。

后来我注意到一个目录中有3个额外的文件。

这些文件的名称是:

config, HEAD, description

我删除了文件,错误就没有出现。

config 包含:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = true

HEAD 包含:

ref: refs/heads/master

description 包含:

Unnamed repository; edit this file 'description' to name the repository.

1
自动删除Git生成的文件是一个非常糟糕的想法。你应该只通过命令来解决问题。 - Right leg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接