この記事を書いたきっかけ
Gitで管理していた余計なファイルを.gitignoreに追記してコミットしたのに、なぜかGitの管理に残ったままだったことがありました。おかしいな〜と思っていろいろ調べてみました。すると、なんでも.gitignoreに書けばGitが無視してくれるというわけではなく、初めから.gitignoreに書いておくか、あとからGitの管理から外すコマンドを実行する必要があると知りました。
今回は特定のファイルをGitの管理対象から外したい時に使う2つの操作について簡単に勉強します。
git rm --cachedと.gitignoreの共通点と相違点
共通点
Gitの管理対象から外す
git rm --cached
コマンドと.gitignoreファイルは、
どちらもファイルをGitの管理対象から外すために使用します。これにより、そのファイルの変更は追跡されなくなります。
相違点
git rm --cachedコマンドの場合
既にGitの管理下にあるファイルをGitの管理対象から外すコマンドです。つまり、過去にコミットされたファイルをリポジトリから削除し、以降のコミットでは追跡されないようにするために使用されます。
このコマンドを実行すると、ファイルは次回のコミット時にリポジトリから削除されますが、ワーキングディレクトリには残ります。
一度、Gitの管理対象に入れてしまったけど、ただ管理対象から外したいだけの時はこのコマンドを使います。
.gitignoreファイルの場合
まだGitの管理下にないファイルを追跡しないように指定するときに使用します。既にコミットされているファイルに対しては効果がありません。
.gitignore に記載されたパターンに一致するファイルやディレクトリは、新規に追加された場合にGitによって無視されますが、既にコミットされているファイルは引き続き追跡されます。
具体例
-
既にコミットされているファイルをGitの管理対象から外す場合
git rm --cached <ファイル名>
git commit -m "Remove <ファイル名> from version control"
-
初めから追跡したくないファイルを指定する場合
echo "build/" >> .gitignore
echo "*.log" >> .gitignore
まとめ
git rm --cachedコマンドは既にコミットされたファイルをGitの管理対象から外すためのコマンドであり、 .gitignoreファイルはこれからコミットされるファイルを無視するための設定ファイルです。
既にリポジトリに含まれている不要なファイルを管理対象から外したい場合は、 git rm --cached を使用し、今後追加される不要なファイルを無視したい場合は .gitignore に記載すればオッケーです。