Ответ 1
Предположим, что новый старейший хеш-фиксация X, и мы можем временно использовать "oldroot" и "newroot":
git checkout -b oldroot X
TREE=`git write-tree`
COMMIT=`echo "Killed history" | git commit-tree "$TREE"`
git checkout -b newroot "$COMMIT"
git rebase --onto newroot oldroot master
# repeat for other branches than master that should use the new initial commit
git checkout master
git branch -D oldroot
git branch -D newroot
git gc # WARNING: if everything done right, this will actually delete your history from the repo!
Это создаст фиксацию "newroot" с тем же содержимым, что и "oldroot", но без каких-либо родителей. Затем он переустанавливает все остальные ветки на новый корень, который должен быть в истории всех из них.
EDIT: проверено и исправлено; чуть позже, немного уточнил