はじめに
開発中に誤って.envファイルやその他の機密情報を含むファイルをGitHubにアップロードしてしまうことは、誰にでも起こり得るミスです。これらのファイルにはAPIキーやデータベースの接続情報など、外部に漏れてはならない情報が含まれていることが多いため、早急かつ適切な対応が必要です。本記事では、誤って機密ファイルをアップロードしてしまった場合の具体的な対処法について解説します。
.gitignoreに追加してコミットしても、すでにコミットされたファイルはリポジトリから自動的に削除されません。手動で削除が必要です。
ファイルを削除して新しいコミットを作成しても、過去の履歴には依然としてファイルが残っているため、履歴のクリーンアップが必要です。
対処の基本ステップ
1. .gitignoreに追加する
まず、誤ってコミットしたファイルが再度コミットされないように、.gitignoreファイルに対象のファイルやディレクトリを追加します。
# Dependency directories
/node_modules
# Environment variables
.env
これにより、今後.envファイルがリポジトリに追加されることを防げます。
2. リベースを開始する
次に、誤ってコミットしたファイルを含む履歴を修正するため、インタラクティブリベースを使用します。例えば、直近の3つのコミットを対象にリベースを行う場合、次のコマンドを実行します。
git rebase -i HEAD~3
HEADを設定しないとうまく機能しないです。
3. コミットの編集
このコマンドを実行すると、エディタが開き、以下のようなリストが表示されます。
pick abcdef1 First commit
pick abcdef2 Added login page
pick abcdef3 Another commit
削除したいファイルやフォルダが含まれるコミット行をpickからeditに変更します。例えば、最初のコミットを編集する場合は次のようにします。
- pick abcdef1 First commit
+ edit abcdef1 First commit
pick abcdef2 Added login page
pick abcdef3 Another commit
保存して、エディタを閉じます。
3. コミットを修正
リベースが一時停止し、指定したコミットの修正を行います。まず、誤ってコミットしたファイルやフォルダを削除し、変更をステージングします。
ファイルを削除する場合:
git rm --cached .env
フォルダ(例えばnode_modules)を削除する場合:
git rm -r --cached node_modules
その後、修正した内容で新しいコミットを行います。
git commit --amend --no-edit
--no-editオプションを使用すると、コミットメッセージを変更せずにコミット内容を更新できます。
4. リベースを再開する
修正が完了したら、次のコマンドでリベースを再開します。
git rebase --continue
5. 修正内容をリモートに反映する
最後に、ローカルリポジトリの修正内容をリモートリポジトリに反映させます。ただし、リモートリポジトリの履歴が書き換わるため、強制プッシュが必要です
git push origin --force
強制プッシュにより、リモートリポジトリの履歴が書き換えられるため、他の開発者と連携している場合は事前に通知を行うことが重要です。
まとめ
この記事では、.envなどの機密ファイルをGitHubに誤ってアップロードしてしまった際の対処法を紹介しました。迅速かつ適切に対処することで、被害を最小限に抑えることができます。また、再発を防ぐための予防策も重要です。この記事を参考に、日常の開発に役立ててください。