git commit した後に .gitignore したい場合
時々、git commit した後に「そういえばこれ管理対象から外したいファイルだった」と気づいて .gitignore したいということがあります。
git rmを使えばリポジトリ管理から削除することはできますが、ローカルのファイルも削除されてしまいます。
ローカルのファイルは削除せずに残しておきたい。。。
そんな場合 git rm --cached を指定することで、リポジトリからのみ削除することが可能です。
git rm --cached {管理対象から外したいファイル名}
実験してみます。
・リポジトリを作成してファイルをコミットする
mkdir sample
cd sample
git init
echo 'ignore' > ignore1.html
echo 'ignore' > ignore2.html
git st
# ignore1.html
# ignore2.html
git add .
git commit -m 'first commit'
・ignore1.html, ignore2.htmlに変更を加える
echo 'add ignore' > ignore1.html
echo 'add ignore' > ignore2.html
・管理対象から外すファイルだったことに気づき、.gitignoreにignore1.html, ignore2.htmlを記述
vi .gitignore
ignore1.html
ignore2.html
git st
# modified: ignore1.html # 無視されない
# modified: ignore2.html # 無視されない
# .gitignore
・git rmを実行
git rm ignore1.html
error: 'ignore2.html' has local modifications
(use --cached to keep the file, or -f to force removal)
ローカルで変更を加えているためrmできず、今回はfオプションで強制削除してみます
git rm -f ignore1.html
git st
deleted: ignore1.html
ls -la
ローカルからもignore1.htmlが削除されています
・git rm --cachedを実行
git rm --cached ignore2.html
git st
# deleted: ignore1.html
# deleted: ignore2.html
ls -la
ignore2.htmlはローカルに残っていることを確認
これで間違って管理対象外ファイルをコミットしてしまった場合も安心ですね。