gitの履歴から特定のコミット以降の履歴だけを残してクリアする

個人で開発しているアプリケーションのgitリポジトリで履歴がグチャグチャしてしまったので、
コミット履歴をちょっと弄った時のメモです。

====================================
※注意※
gitの履歴は過去に何があったかを調べる際の手がかりになるので、
削除する理由がないのであれば残しておきましょう。
特に、他人と共同で修正しているリポジトリであれば尚更です。

====================================

履歴を残し始める直前のバージョンの状態を作る

# git clone  tmpRepo1
# cd tmpRepo1
# git checkout {残し始めたいコミットの直前のコミット番号}
# rm -rf .git
# cd ../

作業用のリポジトリを作る

# git clone  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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です