945 文字
5 分
git-filter-repoの使い方メモ(Windows11)

はじめに#

GitHubに間違えてアップロードしたファイルの履歴を削除するためにgit-filter-repoを使用しました。
この記事ではWindows11でのgit-filter-repoのインストール方法と使い方を自分用も兼ねてまとめます。

WARNING

当記事は個人的なメモであり、内容の正確性について十分に確認できていません。ご了承の上、参考程度にご覧ください。
記事の内容は履歴を削除するものであり、一度行うともとに戻すことができない危険な操作が含まれています。実行する場合は自己責任でお願いします。
また、git-filter-repoを使用する際は以下の公式のドキュメントを参照してください。

git-filter-repo#

newren
/
git-filter-repo
Waiting for api.github.com...
00K
0K
0K
Waiting...

Pythonのインストール#

PythonがPCにインストールされていない場合は以下のリンクからインストールしてください。
https://www.python.org/downloads/

git-filter-repoのインストール#

以下のリンクからgit-filter-repo本体をDLして「git-filter-repo」(拡張子なし)という名前で保存
https://github.com/newren/git-filter-repo/blob/main/git-filter-repo

IMPORTANT

git-filter-repoはpipのようなパッケージマネージャーでインストールすることもできます。
参考:https://github.com/newren/git-filter-repo/blob/main/INSTALL.md
パッケージマネージャーでgit-filter-repoをインストールした場合はこの記事のコマンドとは異なる可能性があります。
記事中のpython git-filter-repoの部分はgit-filter-repoと置き換えて実行すれば問題ないと思います。

履歴から削除するファイルのリストを作成する#

今回は複数のファイルの履歴をまとめて削除するためにtxtファイルを使用する方法で行います。

削除するファイルをリポジトリのルートディレクトリからの相対パスで一覧にします。
ここではファイル名をdelete-list.txtとします。(ファイル名は任意)

IMPORTANT

ディレクトリの区切りは/にする必要があります。(\や¥だと消えない)
エンコードはUTF-8(BOMなし)で保存してください。
編集する際はメモ帳よりもVSCodeのようなテキストエディタを使用することをおすすめします。

delete-list.txt
file1.txt
/path/file2.txt
/path/path2/file3.txt

作業準備#

現在作業をしているディレクトリと別のディレクトリに移動して対象リポジトリをクローンします。
例:C://develop/exampleで作業している場合はC://develop/に移動してクローン

コマンドプロンプト
cd ..
git clone [作業対象リポジトリのURL]

上の作業によりC://develop/[リポジトリ名]が作成されます。

コマンドプロンプト
cd [リポジトリ名]

ダウンロードしてあるgit-filter-repoをクローンしてきたフォルダにコピーします。
例:C://develop/[リポジトリ名]にgit-filter-repoをコピー

履歴を削除する#

コマンドプロンプトで以下のコマンドを実行してgit-filter-repoを実行

Terminal window
python git-filter-repo --invert-paths --paths-from-file delete-list.txt --force

削除できたか確認する#

以下のコマンドを実行して何も出てこなければ削除が成功しています。

Terminal window
git log --all -- <削除したいファイル(delete-list.txtに書いたパス)>

リモートリポジトリに反映する#

git-filter-repoを実行するとローカルリポジトリに紐づけたリモートリポジトリの情報が消えるため、再度リモートリポジトリを設定します。

Terminal window
git remote add origin [リモートリポジトリのURL]

強制的にプッシュしてリモートリポジトリにローカルリポジトリの内容を反映します。

Terminal window
git push --force --mirror origin

作業後の注意#

GitHub からデータを完全に削除するには作業後、以下のリンク先の手順に従ってGitHubのサポートに連絡する必要があります。
https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository#github-%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%AE%8C%E5%85%A8%E3%81%AB%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B

参考リンク#