Fix a bad tree

Due to a bug in egit’s implementation of the git rm command, empty trees may not be removed from the index and result in a “bad tree” error on GitHub:

Fixing the repo

Fixing this error is fairly simple with the commandline. To fix the error you need to recreate the tree and then remove it using git rm to ensure it is removed correctly.

For example, if the bad tree is at badtree/ we would run:

tekkub@iSenberg ~/tmp/fixing_bad_tree master
> mkdir badtree

tekkub@iSenberg ~/tmp/fixing_bad_tree master
> touch badtree/temp

tekkub@iSenberg ~/tmp/fixing_bad_tree master
> git add badtree/temp

tekkub@iSenberg ~/tmp/fixing_bad_tree master+
> git commit -m "Fixing bad tree, step one"
[master dbe6a08] Fixing bad tree, step one
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 badtree/temp

tekkub@iSenberg ~/tmp/fixing_bad_tree master
> git rm badtree/temp
rm 'badtree/temp'

tekkub@iSenberg ~/tmp/fixing_bad_tree master+
> git commit -m "Fixing bad tree, step two"
[master 46ae6d2] Fixing bad tree, step two
 0 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 badtree/temp

We can then confirm the tree is removed by making sure it is not listed by git ls-tree:

tekkub@iSenberg ~/tmp/fixing_bad_tree master
> git ls-tree -r HEAD | grep badtree

If this returns no results, push the repo and everything should be fixed!

Avoiding future corruption

We recommend users avoid using egit to remove files from their repos. Always use git rm from the command line.