gitの履歴を消す

正確には「履歴を消した新しいリポジトリを作る」 滅多にやらないと思うけどメモ。 forkしたリポジトリを公開する時とか?

リモートに空のリポジトリを作る

mkdir /git/new_repository.git
cd /git/new_repository.git
git init --bare --shared=true

ローカルにcloneして内容をコピー

git clone remote://git/new_repository.git
cd ~/old_repository
git checkout-index -a -f --prefix=export/
cp -r ~/old_repository/export/* ~/new_repository/
cd ~/new_repository
git add .
git commit -m 'moved to new repository'
git push origin master

master以外のブランチも移動するには

cd ~/old_repository
git checkout my_branch
git checkout-index -a -f --prefix=export/
cd ~/new_repository
rm -rf *
git branch my_branch
cp -r ~/old_repository/export/* ~/new_repository/
git add .
git commit -m 'moved to new repository'
git push origin my_branch