履歴からファイルを削除する

GitGitBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

Git は、開発者がコードベースの変更を追跡できる人気のあるバージョン管理システムです。ただし、時々、リポジトリの履歴からファイルを完全に削除する必要があります。この実験では、Git の履歴からファイルを削除するプロセスを案内します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git/DataManagementGroup -.-> git/filter("Apply Filters") subgraph Lab Skills git/filter -.-> lab-12747{{"履歴からファイルを削除する"}} end

履歴からファイルを削除する

API キーやパスワードなどの機密情報を含むファイルを誤って Git リポジトリにコミットしたとしましょう。このファイルは決してコミットすべきではなかったことに気づき、リポジトリの履歴から完全に削除したいと思います。ただし、単にファイルを削除して変更をコミットしても、リポジトリの履歴からは削除されません。このファイルは以前のコミットでもアクセス可能であり、セキュリティ上のリスクを引き起こす可能性があります。

この実験を完了するには、GitHub アカウントの Git リポジトリ git-playground を使用します。このリポジトリは https://github.com/labex-labs/git-playground.git のフォークから来ています。このリポジトリには、決してコミットすべきではなかった file1.txt という名前のファイルが含まれています。file1.txt をリポジトリの履歴から削除するには、次の手順に従ってください。

  1. リポジトリをローカルマシンにクローンします。
git clone https://github.com/your-username/git-playground
  1. 次のコマンドを使用してディレクトリに移動し、識別情報を設定します。
cd git-playground
git config --global user.name "your-username"
git config --global user.email "your-email"
  1. リポジトリのインデックスからファイルを削除します。
git rm --cached --ignore-unmatch file1.txt
  1. この変更を "Remove sensitive file1.txt" というコミットメッセージでコミットします。
git commit -m "Remove sensitive file1.txt"
  1. リポジトリの履歴を書き換えて、file1.txt のすべてのインスタンスを削除します。
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch file1.txt" --prune-empty --tag-name-filter cat -- --all
  1. 変更を強制的にリモートリポジトリにプッシュします。
git push origin --force --all

これらの手順を完了すると、file1.txt はリポジトリの履歴から完全に削除され、git log --remotes を実行した後、file1.txt のコミットは表示されません。

まとめ

機密情報が誤ってコミットされた場合、Git の履歴からファイルを削除することは必要な手順です。この実験では、git filter-branch コマンドを使用して、Git の履歴からファイルを削除するプロセスを案内しました。リポジトリの履歴を書き換える際は注意が必要です。なぜなら、意図しない結果を招く可能性があるからです。