Gitで未追跡(untracked)ファイルを削除する方法|git cleanコマンドと.gitignoreの使い方
Gitで未追跡ファイルを削除するには、git cleanコマンドを使用します。git clean -fdで未追跡のディレクトリを、git clean -fxで無視対象(ignored)のファイルも含めて削除できます。また、.gitignoreファイルを活用すれば、特定のファイルをGitの管理対象から除外することも可能です。
未追跡ファイルとは?
Gitリポジトリ内のファイルには、「追跡済み(tracked)」と「未追跡(untracked)」の2種類があります。開発を進める中で、リポジトリから未追跡ファイルを削除したい場面に遭遇することがあります。
具体的には、以下のようなケースで未追跡ファイルの削除が必要になります。
- 作業ディレクトリが不要なファイルで散らかっている場合
- 誤って意図しないフォルダをGitの管理下に置いてしまった場合
- マージ時に残ったファイルを整理したい、あるいは特定のファイルだけを削除したい場合
未追跡ファイルを削除する主な方法
Gitブランチ上の未追跡ファイルは、次のいずれかの方法で処理できます。
- .gitignoreファイル:リポジトリ内の指定したファイルやディレクトリをGitの管理対象から除外する
- git clean -fd コマンド:未追跡のファイルとディレクトリを削除する
- git clean -fx コマンド:無視対象のファイルも含めて削除する
この記事では、Gitで未追跡ファイルを削除する方法を具体例とともに解説します。
追跡済みファイルと未追跡ファイルの違い
作業ディレクトリ(ローカル環境)にあるファイルは、すべて「追跡済み」か「未追跡」のどちらかに分類されます。追跡済み(tracked)とは、過去のスナップショット(コミット)に追加・コミットされており、Gitが変更を監視している状態のファイルを指します。
一方、未追跡(untracked)ファイルはその逆で、前回のコミットには含まれておらず、ステージングにも追加されていないファイルです。これらのファイルは、ステージしてコミットに含めるか、あるいは削除するかを選ぶことになります。
ファイルを追加・変更した直後にgit statusを実行すると、未追跡ファイルと追跡済みファイルの一覧が表示されます。
方法1:.gitignoreでファイルを除外する
最初の方法は、対象のファイルを無視(ignore)することです。例えば、C++プロジェクトのビルド時に生成される不要なファイルなどが該当します。
もう少し身近な例を挙げると、環境変数やデータベースの接続情報、APIキーなどを記録した.envファイルがあります。このような機密情報は、リポジトリに含めて公開してしまうのは避けたいところです。こうした場面で.gitignoreファイルが役立ちます。
.gitignoreファイルに記載されたファイルは、Gitの追跡フローから除外されます。Gitはそれらのファイルを無視するため、追跡されることも、「未追跡ファイルがある」と警告されることもありません。
まず、プロジェクトのルートに.gitignoreファイルを作成し、除外したいファイルやフォルダの相対パスを記述します。例えば、node_modulesフォルダとconfig.envファイルを除外したい場合は、次のように書きます。
node_modules config.env
.gitignoreの理解は、プロジェクトが成長するにつれてますます重要になります。どのファイルやフォルダを除外すべきかを常に把握しておきましょう。うっかり機密性の高いファイルをステージしてしまうと、Gitがそれらを追跡し始め、APIキーなどの重要な情報がリポジトリ経由で外部に漏れる危険があります。
方法2:git cleanコマンドで削除する
もう一つの方法が、git cleanコマンドを使うことです。git cleanコマンドは、リポジトリから未追跡ファイルを削除します。
git cleanは、作業ツリー(ワーキングツリー)内の現在の作業ディレクトリを起点として動作します。作業ツリーとは、現在表示しているブランチのことです。
例えば、別のフォルダに入れるつもりだった個人的な写真フォルダを、誤ってリポジトリに追加してしまったような場合に、このコマンドが役立ちます。
git cleanでは複数のオプションを組み合わせられます。まずはコマンドの構文を見てみましょう。
git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>…
ここで重要な注意点があります。git cleanはファイルをシステムレベルで完全に削除するため、削除後の復元はできません。ターミナルのrmコマンドと同じ挙動です。ただし、過去のコミットで追跡されていたファイルであれば、古いバージョンを取り戻せる可能性はあります。
git clean -d -n:削除前に内容を確認する
パスを指定せずに実行する場合、通常は-dオプションを付けて、未追跡のディレクトリも対象に含めます。
さらに、まずは-nオプション(ドライラン)を付けることをおすすめします。これは、実際に削除を行う前に「何が削除されるか」を事前に確認できるオプションです。つまり、-nフラグはクリーン処理の予行演習を行います。削除内容を確認して問題なければ、改めてgit cleanを実行すればOKです。
このオプションを使えば、まだ削除したくないファイルや、削除してはいけないファイルを誤って消してしまう事故を防げます。
実際に試してみましょう。追跡したくないsillyPicture.jpgというファイルがあり、これを削除したいとします。まずは何が起こるか確認します。
git clean -f:強制的に削除する
git cleanを実際に実行するには、-f(force)オプションの指定が必要になる場合があります。このオプションは、削除するファイルを確定できている場合にのみ使用してください。
sillyPicture.jpgを削除するには、git clean -fを実行します。より具体的に指定したい場合は、git clean -f sillyPicture.jpgのようにファイル名を明示することもできます。
ここで注目してほしいのは、最初にgit statusが未追跡ファイルとしてsillyPicture.jpgを検出していたのに対し、-fオプションで削除を実行した後はファイルが消えている点です。これで削除完了です!
なお、-fオプションは非常に強力ですが、.gitignoreで無視されているファイルは削除できません。-fはあくまでGitのバージョン管理システムが認識しているファイルが対象だからです。
git clean -x:無視対象のファイルも削除する
本当に自分が何をしているのか理解している場合を除き、このオプションは推奨されません。ただし、.gitignoreで無視されているファイルやディレクトリも削除することは可能です。その場合は-xオプションを使用します。git clean -d -x -fと実行すれば、一瞬で無視対象ファイルごと削除できます。ただし、安易に使わないようにしましょう。
git clean -d -i:対話モードで安全に削除する
初心者におすすめなのがこの方法です。使い始めたばかりの頃は、どのオプションを渡すべきか慎重になりたいものですよね。前述のドライラン(-n)に加え、-iオプションを使えば、対話型インターフェースが起動し、項目を選択しながら安全に削除を進められます。
まとめ
リポジトリから未追跡ファイルを削除するには、.gitignoreファイルまたはgit cleanコマンドを使用します。git cleanコマンドは再帰的にファイルを削除し、現在の作業ディレクトリを起点として動作します。
削除は元に戻せないため、必ず-nオプションでドライランを実行してから、-fで実際の削除を行うのが安全です。Gitについてさらに学びたい方は、公式ドキュメントや学習ガイドも参考にしてみてください。
-
Git初心者向けガイド:バージョン管理の基本をやさしく解説
Linuxユーザーなら、新しいプログラムをダウンロードするときや、CVSやSubversionといったバージョン管理システムを調べているときに、「Git」という名前を目にしたことがあるかもしれません。Gitは、Linuxカーネルの生みの親として知られるLinus Torvalds氏が、既存のソリューションに満足できなかったことをきっかけに開発したリビジョン管理システムです。設計における最大の重点は速度、より正確には効率性に置かれており、従来のシステムが抱えていた多くの欠点を解消しながら、はるかに短い時間で処理を実行します。この記事では、これからGitを学びたい初心者の方向けに、基本的な使い方
-
【初心者向け】OneDriveでファイルを他のユーザーと共有する方法|共有の停止・権限変更も解説
Microsoft OneDriveは、Windowsに標準搭載されているオンラインストレージ兼同期サービスです。豊富な機能を備えており、競合サービスと比較しても引けを取らない、むしろ優れた使い勝手を提供しています。 OneDriveではドキュメントをオンライン上に保存でき、Web版のMicrosoft Office(Word、PowerPoint、Excel)にもブラウザから直接アクセスできます。さらに、組織外のパートナー、サプライヤー、顧客などとも安全に共同作業が可能で、相手がMicrosoft 365を契約しているかどうかも問いません。 OneDriveでのファイル共有はとても簡単ですが