gitの履歴から特定のコミット以降の履歴だけを残してクリアする
投稿日:
個人で開発しているアプリケーションのgitリポジトリで履歴がグチャグチャしてしまったので、
コミット履歴をちょっと弄った時のメモです。
====================================
※注意※
gitの履歴は過去に何があったかを調べる際の手がかりになるので、
削除する理由がないのであれば残しておきましょう。
特に、他人と共同で修正しているリポジトリであれば尚更です。
履歴を残し始める直前のバージョンの状態を作る
# git clone <git URL> tmpRepo1
# cd tmpRepo1
# git checkout {残し始めたいコミットの直前のコミット番号}
# rm -rf .git
# cd ../
作業用のリポジトリを作る
# git clone <git URL> tmpRepo2
# cd tmpRepo2
# git checkout --orphan tmpBr
初期状態をコミットする
# rm -rf <.git以外の全て>
# cp -r ../tmpRepo1/* .
# git add .
# git commit -m "Initialization"
残したいコミット履歴に対して、次の処理を過去から順に繰り返し実施する
# git cherry-pick {残したいコミット}
なお、残したいコミット履歴がマージ履歴の場合は以下の手順となる
# git cherry-pick -m 1 {残したいマージコミット}
# git commit --allow-empty
コメントの編集画面が出るが、そのまま:wqして抜ける
意図した履歴が生成されたか確認
# git log
masterにプッシュする
# git checkout -B master
# git push --force
一時的に作ったブランチを削除
# git branch -d tmpBr