こんにちは。iQeda [@iQeeeda] です。
ググッたら「キャッシュが原因」というけど、そのコマンド打っても駄目!
そんな悩みでお困りのあなた...
多分そのファイル、リモートリポジトリで既に管理されていませんか?
今回はローカルで変更したファイルの追跡を無視する Git コマンド、git update-index --skip-worktree について解説します!
まず git rm -r --cached について解説
まだ Git 管理されていないけど、コミットやプッシュでキャッシュが残ってしまった場合、
キャッシュクリアすると .gitignore が適用されることがあります。
# すべてをキャッシュクリア git rm -r --cached . git add . # ファイル指定してキャッシュクリアする git rm -r --cached [ファイル名] git add [ファイル名]
git update-index --skip-worktree
.gitignore はまだ Git で管理下にないファイルやフォルダを記述します。
なので、既に Git 管理化にあるファイルは(キャッシュクリアしても)無視できません。
Git 管理下にあるファイルに対しては git update-index --skip-worktree を使います。
利用シーン
具体例をあげるなら、以下のようなときです。
- ローカル開発環境で自分用に
docker-compose.ymlを編集した - ローカル開発環境だけのファイルが生成されたので
.gitignoreを編集した
「自己都合のコミットはしたくないので、ステージングから取り除きたい」場合に使います。
コマンド
そのような場合は git update-index --skip-worktree [ファイル名] と入力してください。
git update-index --skip-worktree .gitignore git update-index --skip-worktree docker-compose.yml
元に戻したい場合は git update-index --no-skip-worktree [ファイル名] としてください。
git update-index --assume-unchanged
あまり使う機会はないと思いますが、
似たコマンドで git update-index --assume-unchanged というものがあります。
利用シーン
- ローカルの管理が不要だし、環境を高速化したいから取り除きたい
コマンド
git update-index --assume-unchanged [ファイル名] # 元に戻す git update-index --no-assume-unchanged [ファイル名]
「変更したファイルがステージングされなくなる」という点では `--skip-worktree` と同じですが、
「ローカルで管理する必要がないので取り除く」というニュアンスがあります。
注意点 - git reset --hard で変更が消し飛びます!
git reset --hard を実行するとローカルの変更データがなくなってしまいます。
ローカルで管理する必要のないファイルだから消えても問題ないと判断されるようですね。
No comments yet