# How to mess up git


So you think you know git... today I found out something "funny".
In a git repository:

    $ git log
    $ fatal: object 1fcc8de9361c56e538ff35d8cc4b07a9c95b7bf3 is corrupted

Okay, WTF? Lets look in the `.git` directory:

    $ cd .git/objects/1f
    $ ls -l
    total 4
    -r--r--r-- 1 root root 1057 2009-06-23 19:03 03db070bcb47bff3f8106f2ec7028b3496aaa8
    -r--r--r-- 1 root root    0 2009-08-03 21:41 cc8de9361c56e538ff35d8cc4b07a9c95b7bf3

Ah, 0 bytes, that explains it (probably due to the weird reboot of last
night and ext4).

Okay, lets fix this:

    $ mv cc8de9361c56e538ff35d8cc4b07a9c95b7bf3 /tmp
    $ git status
    # On branch master
    fatal: bad object HEAD

Hmmm, not good, let look in `.git/refs/heads`

    $ cd .git/refs/heads
    $ ls -l
    total 0

Hmm, nothing, peeking in another git repo says me that you need a file
`master` here which holds and object ref (a SHA1 string). Lets create
one. First find the latest hash:

    $ find . -mtime -1 -print
    ./objects/c4/eb5cdc3347dfc12e3fc9d5c47b8e20217d38c7

Okay, lets put that in the `master` file:

    $ cat > master
    c4eb5cdc3347dfc12e3fc9d5c47b8e20217d38c7
    ^D

And `git status` came back to live - so something is working again :)
Now try to add something:

    $ git add <somefile>
    fatal: bad tree-ish HEAD

Oh oh... Let "fix" the archive some more:

    $ git gc

That did the trick, my git repository is now *fubar*...

    $ git co
    fatal: You are on a branch yet to be born

Nice.

    $ git branch master
    fatal: A branch named 'master' already exists.

Hmmm, really nice.

    $ git branch
    error: branch 'master' does not point at a commit

    $ git co master
    fatal: reference is not a tree: master

The only way to fix this for now was to zapp the entire `.git`
directory:

    rm -rf .git
    git init

And create a brand new repository.


