git记录并显示在裸回购协议上

git记录并显示在裸回购协议上,git,Git,我在家里的本地网络中的文件服务器上创建了一个裸存储库。 在此之后,我将现有存储库的一个分支从桌面pc推送到这个新的远程存储库 推送工作非常完美,似乎所有数据都到达了(一个“git branch-va”给了我正确的数据)。 但是我不能在裸存储库上使用git log或git show。 我得到一个: 致命:错误的默认版本“HEAD” 或者干脆没有输出 这对于裸存储库正常吗?是否还有另一种可能将一切形象化 编辑: 致命错误现已解决,但我没有收到“git log”或“git log unstable”的

我在家里的本地网络中的文件服务器上创建了一个裸存储库。 在此之后,我将现有存储库的一个分支从桌面pc推送到这个新的远程存储库

推送工作非常完美,似乎所有数据都到达了(一个“git branch-va”给了我正确的数据)。 但是我不能在裸存储库上使用git log或git show。 我得到一个:

致命:错误的默认版本“HEAD”

或者干脆没有输出

这对于裸存储库正常吗?是否还有另一种可能将一切形象化

编辑:
致命错误现已解决,但我没有收到“git log”或“git log unstable”的输出。桌面pc上的同一命令可以完美地工作

是的,这对于新的裸(和非裸)存储库是正常的

解释
HEAD
是Git所称的符号引用——对另一个引用的引用

在非裸存储库中,
HEAD
通常表示当前签出的分支。新提交将导致名为
HEAD
的分支提前引用新提交。当
HEAD
直接引用提交对象而不是分支时,它被认为是分离的,这意味着进一步提交不会导致分支引用提前引用新提交(很危险,因为签出不同的提交或分支将使任何现有引用都无法访问新的提交,从而使它们很难找到并进行垃圾收集)

在裸存储库中,
HEAD
表示存储库的默认分支,因此在存储库的克隆中,
git checkout origin
相当于
git checkout origin/master
,前提是
master
是默认分支(有关详细信息,请参见
git help rev parse

当Git初始化一个新的存储库时,它初始化
HEAD
以引用
refs/heads/master
(换句话说,
HEAD
默认指向
master
分支)。但是,它不会创建名为
master
的分支,因为存储库中还没有要指向
master
的提交

因此,除非您创建一个
master
分支,或者将
HEAD
更改为指向确实存在的分支,否则当您运行查看
HEAD
的命令(例如
git log
git show
而不带任何参数)时,将出现该错误

您仍然可以使用不检查
头部的命令。例如:

git log some_branch_that_exists
修理 要清除错误消息,可以执行以下操作之一:

  • 更改
    HEAD
    以指向确实存在的分支:

    git symbolic-ref HEAD refs/heads/some_other_branch
    
  • 将新的
    master
    分支从其他地方推送到存储库中
  • 在本地创建一个新的
    master
    分支:

    git branch master some_existing_commit
    
形象化 为了可视化存储库中的所有内容,我使用以下方法:

git log --graph --oneline --date-order --decorate --color --all

请注意,即使
HEAD
指向不存在的分支,上述命令也会起作用。

请注意,此消息将随Git 2.6(2015年第3季度/第4季度)而更改

参见(2015年8月29日)作者。
(于2015年9月2日合并)

最后,这一信息将更有意义:

日志
:更清楚地诊断空
头部
如果初始化或克隆空存储库,则运行“
git log
”的初始消息不是很友好:

让我们检测这种情况并写一条更友好的消息:

我们还检测到“HEAD”指向断开的ref的情况;这应该更不常见,但很容易看到。
请注意,我们并没有诊断所有可能的病例。我们依赖于
resolve\u-ref
,这意味着我们没有获得复杂病例的信息。例如,“
--默认主控
”将使用
dwim\u-ref
查找“
refs/heads/master
”,但我们只注意到“
主控
”不存在。
类似地,像“
--default HEAD ^2
”这样的复杂sha1表达式将不会解析为ref

但这没关系。在这些情况下,我们会返回到一个通用的错误消息,而且它们不太可能被使用。
抓住一个空的或破碎的“头部”可以改善普通情况,而其他情况则不会倒退


当我第一次将非主分支机构推向回购时,我遇到了这个错误


为了解决这个问题,我只需将master推送到repo,就这样!

试试git update ref HEAD branch-name@William:您需要
git symbolic ref HEAD branch name
。您的将使
HEAD
成为一个正常的ref。使用git 2.6+(2015年第3季度/第4季度),您将看到不同的错误消息:请参阅。您还可以提到
git log branchname
git show branchname
将work@RichardHansen最后一句话把我的理解提高到了一个全新的水平。非常有用!谢谢。
$ 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