致命的:错误的默认版本'HEAD'

我使用GIT作为我的源代码pipe理系统。 我们把它安装在我们的一个Linux机器上。 龟GIT是我的Windows客户端。

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

当我去unix框中的存储库并inputgit 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'

ps这是一个裸仓库,但我已经创build了其他裸仓库没有这个问题。

你的回购是你的,在你推动或(允许)获取或克隆之前,完全是你的业务。 当你删除你的Windows回购 – 该文件夹并不代表你的本地回购,这是你真正的本地回购,你删除了一切从来没有推,抓取或克隆。

编辑:啊,好吧,我想我看到这里发生了什么:你推到你的linux回购,但它不是光秃秃的,你从来没有在它的工作。

git log而不是git log --all 。 或者git checkout some-branch-name

然后尝试克隆本地回购,在您的Linux机器上; 我敢打赌,它的工作。 你用什么来服务你的回购在Linux上? 尝试cd到它的.git目录和git daemon --base-path=. --export-all git daemon --base-path=. --export-all ,如果只是坐在那里,然后去你的窗口框,并尝试git clone git://your.linux.box.ip ,如果守护进程抱怨它无法绑定添加 – 端口--port=54345的守护进程调用和:54345克隆url。

当我正在工作的分支从版本库中删除时,发生这种情况,但是我所在的工作区没有更新。 (我们有一个工具可以让你使用simlinks从同一个仓库创build多个git“workspaces”。)

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

 git reset --hard <<some branch>> 

我尝试了很多方法,直到我完成了这一个。

没有承诺呢?

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

只是做一个初始提交,错误将消失:

 git commit -m "initial commit" 

确保分支“主”存在! 这显然不只是一个名字。

创build空白裸回购后,我得到这个错误,推一个名为“开发”的分支,并试图使用裸回购的git日志。 有趣的是,git分支知道dev是唯一存在的分支(所以我认为这是一个git bug)。

解决scheme:我重复了这个程序,这次在重新启动仓库之前,在工作仓库上重新命名为“dev”,并将其改名为“master”。 成功!

注意:Git 2.6(2015年第3季度)将最终提供更有意义的错误消息。

见Jeff King( peff )的 提交ce11360 (2015年8月29日) 。
(由Junio C gitster合并- 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 ”这样复杂的sha1expression式不会作为ref来parsing。

但没关系。 在这种情况下,我们会回到一个通用的错误信息,而且不太可能被使用。
捕捉一个空的或破碎的“头”提高了常见的情况下,其他案件不倒退。

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

我不认为这是OP的问题,但如果你像我一样,当你试图玩弄gitpipe道命令( update-indexcat-file而没有实际提交任何东西的时候遇到了这个错误第一名。 所以尝试提交一些东西( git commit -am 'First commit' ),你的问题应该被解决。

我得到了同样的错误,并不能解决它。

然后我注意到我的一个目录中有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.