はじめに
privateのリポジトリで作業してたけど、諸事情によりpublicにすることに。
でも汚いログが見られたくない…。
そんな経験ありませんか?
プライベートリポジトリで開発していたものを公開リポジトリに移行する際や、過去のコミット履歴に残したくない情報が含まれている場合、Git履歴をクリーンアップしたいことがあります。
本記事では、git checkout --orphanコマンドを使って、履歴を削除し最新の状態だけを残す方法を紹介します。
対象読者
- Git履歴に含まれる古いコードや情報を削除したい方
- リポジトリを公開する前に履歴をクリーンにしたい方
- 現在の状態のみを持つ新しい履歴を作成したい方
実行手順
以下のコマンドを順番に実行します。
# 1. 履歴のない新しいブランチを作成
git checkout --orphan new-main
# 2. すべてのファイルをステージング
git add -A
# 3. 新しい初期コミットを作成
git commit -m "Initial commit"
# 4. 古いmainブランチを削除
git branch -D main
# 5. 新しいブランチをmainにリネーム
git branch -m main
# 6. リモートに強制プッシュ
git push -f origin main
各コマンドの説明
-
git checkout --orphan new-main
親コミットを持たない新しいブランチを作成します。このブランチは完全に独立した履歴を持ちます。 -
git add -A
作業ディレクトリのすべてのファイルをステージングエリアに追加します。 -
git commit -m "Initial commit"
新しい履歴の最初のコミットを作成します。 -
git branch -D main
古いmainブランチを削除します。 -
git branch -m main
新しいブランチをmainにリネームします。 -
git push -f origin main
リモートリポジトリに強制的にプッシュします。
⚠️ 重要な注意点
不可逆的な操作です
この操作を実行すると、過去のコミット履歴は完全に削除されます。一度実行すると元に戻すことはできません。
force pushが必要です
git push -f(強制プッシュ)を使用するため、リモートリポジトリの履歴も上書きされます。
チーム開発での影響
他のメンバーがこのリポジトリをクローンしている場合、彼らのローカルリポジトリとの整合性が失われます。実行前にチームメンバーに通知し、再クローンしてもらう必要があります。
実行前のバックアップ
万が一の場合に備えて、実行前にリポジトリのバックアップを取ることを強く推奨します。
# リポジトリ全体をバックアップ
git clone /path/to/repository /path/to/repository-backup
または、GitHubなどを使用している場合は、Export機能でアーカイブをダウンロードしておくと安心です。
masterブランチを使用している場合
デフォルトブランチがmasterの場合は、コマンド内のmainをmasterに置き換えてください。
git checkout --orphan new-master
git add -A
git commit -m "Initial commit"
git branch -D master
git branch -m master
git push -f origin master
まとめ
git checkout --orphanを使用することで、現在の状態のみを持つクリーンな履歴を作成できます。ただし、この操作は不可逆的であり、force pushを伴うため、必ずバックアップを取ってから慎重に実行してください。