Gitクリーン:未追跡ファイルを削除してリポジトリを整理する

Gitリポジトリで作業していると、リポジトリのバージョン管理システムに含まれない未追跡のファイルやディレクトリが蓄積されることが一般的です。これには、テンポラリファイル、ビルドアーティファクト、またはコミットされていない他のローカルで作成されたファイルが含まれる場合があります。時間が経つにつれて、これらのファイルは作業ディレクトリを散らかし、クリーンで整理されたワークスペースを維持するのが難しくなります。

この問題に対処するために、Gitは未追跡のファイルとディレクトリを削除するgit cleanコマンドを提供します。このガイドでは、git cleanを安全に使用する方法、そのさまざまなオプション、意図しないファイル削除を避けながらGitリポジトリを整理整頓するためのベストプラクティスについて説明します。さらに学ぶためには、Gitの基礎GitHubの概念入門のコースを受講して、バージョン管理やGitとGitHubの違いについて学ぶことをお勧めします。

git cleanを理解する

git cleanコマンドは、作業ディレクトリから追跡されていないファイルを削除するGitの便利なツールです。 git cleanコマンドは、作業ディレクトリを pristine な状態にリセットする必要がある場合に便利です。これは、ブランチを切り替える前や一時ファイルを生成するビルドプロセスを実行した後などです。 ただし、git cleanコマンドは、追跡されていないファイルやディレクトリを永久に削除し、それらをゴミ箱やリサイクルビンに移動させないため、注意して使用する必要があります。

git resetgit checkoutが追跡されているファイルを変更するのに対して、git cleanは厳密にバージョン管理されていないファイルやディレクトリを扱います。これには次のものが含まれます:

  • ビルドによって作成された一時ファイル

  • ログファイルやキャッシュデータ

  • .gitignoreにリストされているファイル(-xで明示的に指定された場合)

git clean コマンドは、すっきりとした作業ディレクトリを維持するのに役立ち、トラッキングされたファイルの変更を管理する git resetgit checkout などの他の Git コマンドを補完します。

私は Complete Git Cheat Sheet を一般的な Git コマンドの便利なリファレンスガイドとして見つけます。

git clean の一般的な使用法

git clean コマンドは、クリーンな作業ディレクトリを維持するための便利なツールです。以下は、git clean が不要なファイルやディレクトリを安全に削除できる一般的な使用例です。

トラッキングされていないファイルの削除

Git リポジトリで作業していると、トラッキングされていないファイルが時間とともに蓄積されることがあります。以下のオプションは、それらを削除するのに役立ちます:

  • git clean -f: トラッキングされていないファイルの強制削除。

  • git clean -fd: トラッキングされていないファイルとトラッキングされていないディレクトリを削除します。

  • git clean -fx: .gitignore にリストされたようなトラッキングされていないファイルと無視されたファイルを削除します。

ただし、-fx オプションを使用する際は、無視されたファイルも削除される可能性があるため注意が必要です。コマンドを実行する前に、必ずドライラン(git clean -n)を使用して確認してください。

インタラクティブモード

git clean -i コマンドを使用すると、インタラクティブモードが有効になり、ユーザーがトラッキングされていないファイルを選択的に削除できます。このモードは、削除するファイルやディレクトリをより細かく制御したい場合に便利です。

すでに変更を保存したプロジェクトで作業していると仮定します。ただし、Olympics フォルダーには新しいデータソース 2024_Data2025_Data を追加しました。 git clean -i コマンドを実行すると、トラッキングされていない変更を削除するために以下のオプションから選択できるプロンプトが表示されます。

  • clean: 選択したファイルを削除

  • filter: 削除するファイルのパターンを指定

  • select: 番号で個々のファイルを選択

  • quit: 何も削除せずに終了

git clean -i インタラクティブモード。著者による画像。

安全のためのドライラン

git clean -n オプションを使用すると、実際に削除することなく削除されるべき未追跡ファイルとディレクトリのリストを表示するため、便利な安全対策です。これにより、変更内容をレビューしてから実行することができます。

以下の例では、git clean -n コマンドが削除すべきファイルのリストを表示しますが、実際には削除しません。

ドライラン用のgit clean -n。著者による画像。

git resetと組み合わせる

Gitの作業ディレクトリを完全にリセットするには、git resetgit cleanを組み合わせることができます。以下はその方法です:

  • git reset --hard: 追跡されているファイルを最後にコミットされた状態にリセットし、ローカルの変更を破棄します。

  • git clean -fd: 未追跡のファイルとディレクトリを削除し、コミットされたファイルのみを残します。

この組み合わせにより、完全にクリーンな作業ディレクトリを確保し、ブランチの切り替え、実験的な変更の取り消し、あるいは新たな開始の準備時に便利です。

ローカルの変更を上書きする際のベストプラクティスを学ぶためには、Git Pull Force: How to Overwrite a Local Branch With Remoteチュートリアルをご覧ください。

git cleanの使用の手順ガイド

これらの手順に従って、Gitリポジトリを安全にクリーンアップし、不要な追跡されていないファイルやディレクトリを削除します。

ステップ1:現在の状態を確認

クリーンアップする前に、git statusを実行してリポジトリの現在の状態を確認し、どのファイルが追跡されていないかを確認します。

git status

リポジトリの現在の状態を確認するためにgit status。画像提供:著者。

ステップ2:削除される内容をプレビュー

削除コマンドを実行する前に、git clean -nを使用して削除される内容をプレビューします。

git clean -n

削除する内容をプレビューするためにgit clean -n。画像提供:著者。

ステップ3:追跡されていないファイルを削除

プレビューが正しいようであれば、git clean -fを実行して追跡されていないファイルを削除します。

git clean -f

git clean -fを使用して追跡されていない変更を削除。画像提供:著者。

ステップ4:追跡されていないディレクトリを削除

git clean -fdを使用して追跡されていないディレクトリを削除します。

git clean -fd

未追跡のディレクトリを git clean -fd を使用して削除します。著者による画像。

ステップ 5: 無視されたファイルを削除する

未追跡および無視されたファイルの両方を削除するには、git clean -fx コマンドを使用します。

git clean -fx

ステップ 6: 選択的クリーニングのためのインタラクティブモードを使用する

より多くの制御を求める場合は、インタラクティブな削除のために git clean -i を使用することを検討してください。このモードでは、削除するファイルを個別に選択できます。

Git clean -i

選択的クリーニングのための git clean -i インタラクティブモード。著者による画像。

git clean vs. 他の Git コマンド

git clean コマンドは、ファイルを修正またはリセットする他の Git コマンドとよく比較されます。以下の表は、主要な違いを強調しています:

Command Function
git clean 未追跡のファイルとディレクトリを永久に削除します。
git reset 追跡されたファイルを以前の状態にリセットし、ステージされた変更とコミットされた変更に影響を与えます。
git checkout (または git restore) 追跡されたファイルの変更を破棄しますが、それらを削除しません。
git stash 追跡された変更と未追跡の変更の両方を一時的に保存し、後で使用します。

Git Clean のベストプラクティス

安全かつ効果的にgit cleanを使用するには、以下のベストプラクティスに従ってください:

  • 削除前にドライラン(-n)を使用する:git clean -nオプションを常に使用して、git cleanを実行する前にドライランを行います。これにより、実際に削除されるファイルをプレビューできますが、実際に削除されるわけではありません。

  • 無視されたファイルに注意: git cleanを使用する際は、無視されたファイルを削除するオプションに注意してください。これは、.gitignoreにリストされている重要な設定ファイルを削除する可能性があります。無視されたファイルを削除する必要がある場合は、git clean -fxコマンドを使用してください。

  • Gitリセットと組み合わせた完全なクリーンアップ: リポジトリを完全にリセットするには、git resetgit cleanと組み合わせます。ここで、git reset --hardは、トラッキングされたファイルを最後にコミットされた状態に戻し、git clean -fdはトラッキングされていないファイルとディレクトリを削除します。

  • 安全な削除のためにインタラクティブモード(-i)を使用: ファイルを盲目的に削除するのではなく、インタラクティブモード(git clean -i)を使用して、削除するファイルを確認し選択してください。

潜在的なリスクと注意点

git cleanを使用することは、注意を払わなければリスクがあります。なぜなら、ファイルをどこにも保存せずに永久に削除してしまうからです。考慮すべき主なリスクと注意点は次のとおりです:

  • ファイルは永久に削除されます: 一時的に変更内容を保存するgit stashとは異なり、git cleanは未追跡のファイルやディレクトリを永久に削除します。一旦削除されると、これらのファイルはGitを通じて復元することはできません。後でファイルが必要になる可能性がある場合は、git cleanコマンドを実行する前にスタッシュしたりバックアップしたりすることを検討してください。

  • -xオプションを慎重に使用する: git clean-fxを使用すると、.gitignoreにリストされている重要な設定ファイルやnode_modules/venv/のような依存キャッシュなど、無視されるファイルが削除されます。これらのファイルを誤って削除すると、ビルドや開発環境が壊れる可能性があるため、このオプションは必要な場合のみ使用してください。

  • 最初にドライランを実行: git clean -nを使用して常にドライランを実行してからgit clean -fを実行してください。このステップでは削除されるファイルをプレビューできるため、重要なファイルを誤って削除するのを回避できます。

  • 代替手段: 特定のシナリオでは、git cleanよりもgit stashを使用する方が良い場合があります。git stash -uコマンドは、無視されたファイルを除外してトラッキングされていないファイルを一時的に隠し、後で回復できるようにします。そしてgit stash popは必要に応じて隠し変更を元に戻します。この手法は、ブランチを切り替えたり変更を永久に失わずにワークスペースをクリーンアップする必要がある場合に便利です。

Conclusion

よく管理されたコードベースは、ディテールへの注意、効率性、デジタル資産を責任を持って管理する能力を示しています。雇用者は、ファイルを削除する前に git clean -n を使用するなどのベストプラクティスを理解している開発者を求めています。また、-x を使用して無視されたファイルに注意し、git stash のような安全な代替手段を利用することも重要です。

DataCampのコースを受講することは、学ぶための素晴らしい方法であるだけでなく、ソフトウェア開発を真剣に考えていることを雇用者に示す素晴らしい方法でもあります。そのために、すべてのレベルのためのトップ20のGit面接質問と回答のブログ記事を研究し、新しいGitの基本スキルトラックを受講して、Gitに関するすべてのことの専門家になることをお勧めします。

Source:
https://www.datacamp.com/tutorial/git-clean