git的日志,并显示在裸露的回购
我在家里的本地networking的文件服务器上创build了一个裸存储库。 在此之后,我从现有的存储库的一个分支从我的桌面pc到这个新的远程存储库。
推挤工作完美,似乎所有的数据到达(“git分支-va”给了我正确的数据)。 但是我不能在裸仓库上使用git log或者git show。 我得到一个:
fatal: bad default revision 'HEAD'
或者根本没有输出
裸仓库是否正常? 是否有另一种可能性来想象一切?
编辑:致命的错误现在被解决,但我没有收到“git日志”或“git日志不稳定”的输出。 在桌面PC上的相同的命令完美的作品
是的,这对于新的裸机(和非裸机)是正常的。
说明
HEAD
是Git所谓的象征性参考 – 对另一个参考的引用。
在非裸存储库中, HEAD
通常指示当前哪个分支被检出。 一个新的提交会导致由HEAD
命名的分支被提前引用新的提交。 当HEAD
直接引用一个提交对象而不是分支时,它被认为是分离的 ,这意味着进一步的提交不会导致分支引用被提前引用新的提交(危险,因为签出不同的提交或分支将呈现新的提交无法通过任何现有的引用,使他们很难find并进行垃圾回收)。
在裸存储库中, HEAD
表示存储库的默认分支,因此在存储库的克隆中,如果master
是默认分支,请参阅git help rev-parse
获取详细信息, git checkout origin
等价于git checkout origin/master
。
当Git初始化一个新的仓库时,它会初始化HEAD
来引用refs/heads/master
(换句话说, HEAD
默认指向master
分支)。 但是,它并没有创build一个名为master
的分支,因为master
的存储库中没有提交指向尚未提交。
因此,直到您创buildmaster
分支或将HEAD
指向存在的分支,在运行查看HEAD
的命令时(例如git log
或不带任何参数的git show
),您将看到该错误。
您仍然可以使用不检查HEAD
命令。 例如:
git log some_branch_that_exists
固定
要摆脱错误消息,您可以执行以下任一操作:
-
将
HEAD
更改为指向存在的分支:git symbolic-ref HEAD refs/heads/some_other_branch
- 将新的
master
分支从其他位置推入存储库 -
在本地创build一个新的
master
分支:git branch master some_existing_commit
可视化
为了可视化存储库中的所有内容,我使用如下所示:
git log --graph --oneline --date-order --decorate --color --all
请注意,即使HEAD
指向一个不存在的分支,上述命令也可以工作。
请注意,此消息将随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。但没关系。 在这种情况下,我们会回到一个通用的错误信息,而且不太可能被使用。
捕捉一个空的或破碎的“头”提高了常见的情况下,其他案件不倒退。
当我第一次推到回购非主分支时,我遇到了这个错误。
为了解决这个问题,我只好把主人推回回购,就是这样!