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


73

我正在使用GIT作为我的源代码控制系统。我们已将其安装在我们的Linux机器之一上。Tortoise GIT是我的Windows客户端。

今天早上,我检查了一些更改,并标记了代码。然后,我将本地存储库推送到了远程存储库。

当我在Unix框上进入我的存储库并输入时,git log我得到:

fatal: bad default revision 'HEAD'

但是当我show log使用WindowstortoiseGit客户端进行操作时,历史记录如下所示:

---
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'吗?

ps这是一个裸仓库,但是我创建了其他没有此问题的裸仓库。


您有git遥控器吗?
pktangyue 2013年



一次忘记导航到存储库时,出现了此错误。
Jpaji Rajnish 2014年

1
在像我一样愚蠢的事情之后,其他人遇到这个问题的笔记。在完成新存储库的全新克隆之后,我浪费了很多时间。我在进行克隆的目录中运行git log命令。实际上,我应该将CD复制到克隆后出现的目录中。
Sandeepan Nath

Answers:


19

您的仓库是您的,仓库中的事完全是您的事,直到您推送或(允许)获取或克隆为止。当您删除Windows存储库时-该文件夹并不代表您的本地存储库,而是您实际的本地存储库,您删除了其中从未完成的所有操作,该操作从未推送,获取或克隆。

编辑: 嗯,好吧,我想我看到了这里发生的事情:您已推送到Linux存储库,但它并不裸露,并且您从未在其中工作过。

代替git log,做git log --all。或者git checkoutsome-branch-name

然后尝试在Linux机器上本地克隆仓库。我敢打赌,它行得通。您在Linux上使用什么来服务您的仓库?尝试cd进入其.git目录git daemon --base-path=. --export-all,如果只是坐在那里,则转到Windows框并尝试git clone git://your.linux.box.ip,如果守护程序抱怨它无法将add绑定--port=54345到守护程序调用和:54345克隆URL。


抱歉,我忘了提到我确实推送了远程存储库。我知道推送成功,因为我可以看到GitWeb中的更改。因此,我认为您上面所说的不正确。
Richie 2013年

因此,根据之前的评论,我的远程回购中肯定有代码。但是由于某种原因,Git不允许我克隆它,而是给了我该错误。听起来对吗?我该如何解决?
Richie 2013年

很高兴听到你推。鉴于可能性不大,我git log通过推送到git inited存储库并尝试运行日志来重现您的行为症状。
jthill 2013年

无论发生了什么,看来我已经损坏了我的存储库。我一直在遵循有关如何尝试恢复存储库的指南(git-scm.com/book/en/Git-Internals-Maintenance-and-Data-Recovery)。但是,列出的许多命令对我不起作用,只会出错。我认为重新开始使用此存储库可能会更快。很好笑,GitWeb没有问题。它仍然列出了代码等。我想知道为什么
Richie

所以我昨天从头开始。我再次签入代码并标记了一些更改。我仍然很致命:当我尝试从UNIX发出“ git log”时,默认的修订版“ HEAD”不好。但是,当我在Windows中使用tortoiseGit并执行“显示日志”时,该日志看起来不错,并且显示了我的所有历史记录。我对此错误感到非常困惑。有任何想法吗?我将更改问题以反映我刚刚尝试过的内容
Richie 2013年

40

只需执行一次初始提交,错误就会消失:

git commit -m "initial commit"

谢谢,这真的帮了我
Zohra Khan

1
感谢您的伟大答案( - :它匹配的主题,创建库后,对我的问题的一个简单的解决方案。

为我工作。导致此错误的原因似乎是需要运行git config --global user.email和git config --global user.name
chribonn

35

当我正在使用的分支从存储库中删除但我所在的工作区未更新时,这会发生在我身上。(我们有一个工具,可让您使用simlink在同一个存储库中创建多个git“工作区”。)

如果git branch没有将任何分支标记为当前分支,请尝试执行

git reset --hard <<some branch>>

在尝试解决之前,我尝试了多种方法。


1
这就是为我做的事:)
维克多·马丁斯

1
我重命名了我所在的分支,并收到“错误的默认修订版”错误。这为我解决了,谢谢!
Dan Bechard 2014年

25

尚未提交?

如果没有提交,则它是一个孤立分支。


你好 感谢您的回复。请参阅下面我对答复提供的答案。我很确定我确实做了推。
Richie 2013年

7

注意:Git 2.6(Q3 / Q4 2015)最终将提供更有意义的错误消息。

参见Jeff King()的commit ce11360(2015年8月29日(通过合并JUNIOÇ滨野- -提交699a0f3,2015年9月2日)peff
gitster

logHEAD更清楚地诊断出空

如果您初始化或克隆一个空的存储库,则运行“ 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”不存在。
同样,复杂的sha1表达式(如“ --default HEAD^2”)也不会解析为ref。

但是没关系。在这些情况下,我们会回到一般错误消息,无论如何都不太可能使用它们。
捕获空的或损坏的“ HEAD”可改善常见情况,而其他情况不会退回。


6

确保分支“ master”存在!显然,这不仅是一个名字。

在创建一个空白的裸仓库,将一个名为“ dev”的分支推送到该分支并尝试在裸仓库中使用git log之后,出现了此错误。有趣的是,git分支知道dev是存在的唯一分支(所以我认为这是一个git bug)。

解决方案:我重复了该过程,这次是在工作仓库上将“ dev”重命名为“ master”,然后再推送到裸仓库。成功!


scp在分支结束后,这件事发生在我身上。
EarthmeL14年

2

.git/HEAD引用不存在的分支时,似乎会发生这种情况。我在一个没有任何内容的仓库中遇到了这个错误.git/refs/heads。我不知道回购是如何进入那种状态的,我是从一个离开公司的人那里继承下来的。


除了BSOD中的文件损坏之外,我也发生了同样的事情。我只是将其替换为当前磁头的sha-1哈希,现在一切似乎都井然有序。

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自动生成的文件是一个非常糟糕的主意。您应该只能通过命令来解决问题。
右腿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.