# 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 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.