Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
518 views
in Technique[技术] by (71.8m points)

git log and show on a bare repo

I created a bare repository on a file-server in my local network at home. After this i pushed a branch of an existing repository from my desktop-pc to this new remote repository.

Pushing worked perfectly and it seems, that all data arrived (a "git branch -va" gives me the correct data). But i cannot use git log or git show on the bare repository. i get an:

fatal: bad default revision 'HEAD'

or simply no output

is this normal for bare repositories? Is there another possibility to visualize everything?

Edit: The fatal error is solved now, but i receive no output from "git log" or "git log unstable". Same command on the desktop-pc works perfectly

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Yes, this is normal for new bare (and non-bare) repositories.

Explanation

HEAD is what Git calls a symbolic reference—a reference to another reference.

In non-bare repositories, HEAD normally indicates which branch is currently checked out. A new commit will cause the branch named by HEAD to be advanced to refer to the new commit. When HEAD refers to a commit object directly instead of a branch, it's considered to be detached, meaning further commits will not cause a branch reference to be advanced to refer to the new commits (dangerous because checking out a different commit or branch will render the new commits unreachable by any existing reference, making them hard to find and subject to garbage collection).

In bare repositories, HEAD indicates the repository's default branch, so that in a clone of the repository git checkout origin is equivalent to git checkout origin/master if master is the default branch (see git help rev-parse for details).

When Git initializes a new repository, it initializes HEAD to refer to refs/heads/master (in other words, HEAD points to the master branch by default). However, it does not create a branch named master because there are no commits in the repository for master to point to yet.

So until you either create a master branch or change HEAD to point to a branch that does exist, you'll get that error when you run a command that looks at HEAD (such as git log or git show without any arguments).

You can still use commands that don't examine HEAD. For example:

git log some_branch_that_exists

Fix

To get rid of the error message, you can do one of the following:

  • Change HEAD to point to a branch that does exist:

    git symbolic-ref HEAD refs/heads/some_other_branch
    
  • Push a new master branch into the repository from somewhere else
  • Create a new master branch locally:

    git branch master some_existing_commit
    

Visualization

To visualize everything in the repository, I use something like this:

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

Note that the above command will work even if HEAD is pointing to a non-existent branch.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

56.9k users

...