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