git filter-branchで歴史の書換え、リポジトリのディレクトリ構成を移動、変更、削除する方法

git filter-branchでリポジトリの歴史の書換え、ディレクトリ構成を移動、変更、削除する方法をまとめました。git filter-branchとは例えば、以下の構成のGitのリポジトリがあったとします。ここで、A1、B1、C1は