Gitで管理しているプロジェクトで、「このファイルは管理したくない」「間違えてコミットしてしまった」という経験はありませんか?
この記事では、ファイルをGitの管理対象から外し、リポジトリから削除する方法を初心者にもわかりやすく解説します。
この記事でわかること
- Gitでファイルを管理対象から外す方法
- ローカルのファイルは残してリポジトリからだけ削除する方法
- .gitignoreの正しい使い方
- よくあるトラブルと解決策
なぜファイルをGit管理から除外する必要があるのか
以下のようなファイルはGitで管理すべきではありません:
- 環境変数ファイル(.env、config.jsonなど) – APIキーやパスワードが含まれる
- 依存関係フォルダ(node_modules、vendor など) – サイズが大きく必要ない
- ビルド成果物(dist、buildフォルダなど) – 自動生成されるファイル
- ログファイル(*.log) – 開発環境固有の情報
- 個人設定ファイル(.DS_Store、.ideaなど) – 他の開発者に不要
これらを誤ってコミットすると、セキュリティリスクやリポジトリの肥大化を招きます。
Git管理から除外する基本手順
ステップ1: ファイルをリポジトリから削除(ローカルには残す)
これが最も一般的な方法です。リポジトリからは削除しますが、ローカルのファイルは残ります。
git rm --cached ファイル名
フォルダ全体を削除する場合:
git rm --cached -r フォルダ名
重要ポイント:
--cached
オプションを付けることで、ローカルのファイルは削除されません-r
オプションはフォルダを再帰的に処理するために必要です
ステップ2: .gitignoreに追加
今後、同じファイルが追跡されないように.gitignoreに追加します。
echo "ファイル名" >> .gitignore
または、テキストエディタで.gitignore
ファイルを開いて追加することもできます:
# .gitignoreファイル
.env
node_modules/
*.log
dist/
ステップ3: 変更をコミット
git add .gitignore
git commit -m "Remove sensitive files from tracking and update .gitignore"
ステップ4: リモートリポジトリに反映
git push
これで完了です!指定したファイルはGitHubやGitLabなどのリモートリポジトリからも削除されます。
実践例:よくあるケース別の対処法
ケース1: .envファイルを除外したい
環境変数ファイルは機密情報を含むため、必ず除外しましょう。
# リポジトリから削除(ローカルには残す)
git rm --cached .env
# .gitignoreに追加
echo ".env" >> .gitignore
# コミットしてプッシュ
git add .gitignore
git commit -m "Remove .env from tracking"
git push
ケース2: node_modulesを除外したい
依存関係フォルダは非常に大きいため、リポジトリに含めるべきではありません。
# リポジトリから削除
git rm --cached -r node_modules
# .gitignoreに追加
echo "node_modules/" >> .gitignore
# コミットしてプッシュ
git add .gitignore
git commit -m "Remove node_modules from tracking"
git push
ケース3: すべてのログファイルを除外したい
ワイルドカードを使って、特定の拡張子を持つファイルをまとめて除外できます。
# すべての.logファイルを削除
git rm --cached *.log
# .gitignoreに追加
echo "*.log" >> .gitignore
# コミットしてプッシュ
git add .gitignore
git commit -m "Remove log files from tracking"
git push
ローカルからも完全に削除したい場合
もしローカルのファイルも不要な場合は、--cached
オプションを付けずに実行します。
git rm ファイル名
git commit -m "Delete file completely"
git push
注意: この方法はローカルのファイルも削除されるため、慎重に実行してください。
よくあるトラブルと解決策
トラブル1: .gitignoreに追加したのに除外されない
原因: すでにGitで追跡されているファイルは、.gitignoreに追加しただけでは除外されません。
解決策: 上記のgit rm --cached
コマンドで一度削除する必要があります。
トラブル2: 複数のファイルを一度に削除したい
解決策: スペース区切りで複数指定できます。
git rm --cached file1.txt file2.txt file3.txt
または、パターンマッチを使用:
git rm --cached *.tmp
トラブル3: 過去のコミット履歴からも削除したい
git rm
では最新のコミットから削除されるだけで、過去の履歴には残ります。完全に削除するには、Git履歴の書き換えが必要です(上級者向け)。
# 注意: これは履歴を書き換えるため、チームでの使用は慎重に
git filter-branch --tree-filter 'rm -f ファイル名' HEAD
または、より安全なgit filter-repo
ツールの使用をおすすめします。
.gitignoreのベストプラクティス
効果的な.gitignoreファイルの例:
# 環境変数
.env
.env.local
.env.*.local
# 依存関係
node_modules/
vendor/
# ビルド成果物
dist/
build/
*.min.js
# ログファイル
*.log
logs/
# OS固有ファイル
.DS_Store
Thumbs.db
# エディタ設定
.vscode/
.idea/
*.swp
ヒント: プロジェクトの種類に応じた.gitignoreのテンプレートは、gitignore.ioで生成できます。
まとめ
Gitでファイルを管理対象から除外する手順をおさらいします:
git rm --cached ファイル名
でリポジトリから削除.gitignore
に追加して今後の追跡を防ぐ- 変更をコミットしてプッシュ
この方法を覚えておけば、機密情報の漏洩を防ぎ、リポジトリを適切な状態に保つことができます。
特に.env
ファイルやnode_modules
などは、プロジェクト開始時に必ず.gitignoreに追加することを習慣にしましょう。