【GitHub】間違って.envをPushした場合の取り消し方法

に公開
3

使用するケース

  • GitHubにプッシュ済みの状態で、直後に.envファイルが含まれていることに気づいた
  • まだコミット履歴が浅く(複数のコミットに.envが含まれていない)

1. .gitignoreに追加:

  • 目的:今後の.envファイルの追跡を防ぐ
  • タイミング:気づいた時点ですぐに実施
    まず、今後のコミットで.envファイルが追跡されないようにするために、リポジトリのルートディレクトリにある.gitignoreファイルに.envを追加。
    Next.jsとかframeworkを追加すると気づいたらディレクトリに追加されているのですが、.envは自分で追加しないと漏れてしまう。
.env

2. キャッシュから削除:

  • 目的:現在のGitHubリポジトリから.envファイルを削除する準備
  • 効果:ローカルの.envファイルは残したまま、Gitの管理から外す
    .envファイルをGitのキャッシュから削除します。これにより、次のコミットでリポジトリから削除されます。.gitのキャッシュから.envファイルを削除することは、Gitがそのファイルの変更を追跡しないようにする操作になる。
    具体的には、ファイルが既にGitのインデックス(ステージングエリア)に存在している場合、そこから削除し、次のコミットでリポジトリからそのファイルを削除することを意味している
bash
git rm --cached .env

3. コミットとプッシュ:

  • 目的:GitHubリポジトリから.envファイルを削除
  • 効果:リモートリポジトリから.envファイルが削除される
    .envファイルを削除した変更をコミットし、リモートリポジトリにプッシュします。
bash
git commit -m "Remove .env file from repository"
git push origin [branch-name]

注意点

  • この手順は直近のコミットや履歴の浅い状態での対応に適しています
  • 古いコミット履歴に.envがある場合はgit filter-branchを使用する必要があります
  • 直前のコミットだけの問題ならgit reset --soft HEAD~1の方が簡単です

.envファイルをGitHubリポジトリから安全に削除する手順

.envファイルに機密情報が含まれている:

  • GitHub上のコミット履歴から完全に削除する必要がありますのでご注意ください!
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch .env" \
--prune-empty --tag-name-filter cat -- --all

Discussion

ちゃちゃ

これだけだとHistoryで.envの中身が確認できてしまうので今までのコミット履歴から全て削除しないとですかね?

git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch .env" \
--prune-empty --tag-name-filter cat -- --all
milbonmilbon

ちゃ様
ありがとうございます!!!誤解のないよう、使用するケースと補足、注意点追加しました!
過去に.envの履歴がある場合がほとんどだと思いますので、コメントのとおりの操作が必要です。
コメントありがとうございました!!🥲🙏