We would like to have a way to fix up repositories' history; e.g., to remove corruption that may have happened some time in the past.
The standard tool for mass-rewriting of Git history is git filter-branch
. But it is awkward to use and has a number of limitations:
- It is a shell script, and correspondingly slow
- It cannot deal with some kinds of corruption, because it tries to check out all historical revisions into the index and/or working tree
- It can make "grafts" and "replace references" permanent, but only at the commit level. It cannot make "replace references" for trees or blobs permanent.