【Git】ファイル削除の基本と手順を初心者向けに解説

Web開発

はじめに

gitはソフトウェア開発の現場で広く使われているバージョン管理システムです。
ファイルの変更履歴を追跡し、いつでも好きな時点に戻れるところが便利な特徴といえます。
ただし、ファイルを単にパソコン上から削除しただけでは、gitの追跡から完全に外れるとは限りません。

皆さんの中には、余計なファイルをコミットしてしまい「ちゃんと削除したはずが、リポジトリに残ったままになっている」「誤って大事なファイルを削除してしまい、どうやって元に戻せばいいのかわからない」といった困りごとがあるかもしれません。

この記事では、gitでファイルを削除するための具体的なコマンドや手順をわかりやすく整理し、実務のシーンと結びつけて解説します。
初心者の皆さんがつまずきやすいポイントにも触れながら、削除や取り消し手順を確認していきましょう。

この記事を読むとわかること

  • ローカルだけでなく、gitの追跡から外す方法
  • git rmコマンドの基本的な使い方
  • コミット後に削除したファイルを復元する方法
  • 実務で役立つシーンや注意点

gitでファイルを削除する仕組み

gitではファイルの変更をステージングエリアに追加し、コミットという形で履歴に残します。
そのため「手元のフォルダから消しただけ」では、リポジトリの履歴やコミット情報には反映されません。

削除の履歴をコミットとして管理したい場合は、ステージングエリアにも「このファイルを削除した」という変更を登録する必要があります。
その役目を担うのが、git rm コマンドです。
ここで覚えておきたいのが、以下の2つのステップです。

  1. git rmで「削除」したことをgitに伝える
  2. git commitで「削除」操作を履歴として確定させる

これらの流れを把握しておくと、実務でもミスを防ぎやすくなります。

git rmコマンドの基本

git rmを使うと、指定したファイルをgitの追跡対象から外し、ローカルからも削除することができます。
基本的には次のような書式で実行します。

git rm <ファイル名>

たとえば test.txt というファイルを削除したい場合は、以下のようになります。

git rm test.txt

このコマンドを実行すると、test.txt はローカル上からも消えて、ステージングエリアには「削除した」という変更が登録されます。
続けて下記のようにコミットすると、リポジトリの履歴にも削除が反映されます。

git commit -m "Delete test.txt"

-rオプションによるディレクトリ単位の削除

git rmには、ディレクトリごと削除するための -r オプションがあります。
-r は「再帰的に削除する」という意味です。
たとえば assets というフォルダを丸ごと削除するときは次のように実行できます。

git rm -r assets
git commit -m "Delete assets folder"

ファイルが多いフォルダを一括で消したい場合は便利ですが、消しすぎには注意しましょう。
重要なファイルまで誤って消してしまうと取り返しがつかなくなる可能性があるため、必ず内容を確認してから実行することをおすすめします。

削除したくないが追跡から外したいだけの場合

ときには「ファイル自体は残したいが、gitの追跡対象からは外したい」というケースもあるかもしれません。
たとえば一時的に生成されるログファイルやキャッシュファイルなどは、ソースコード管理に含めないほうが混乱を防げます。

この場合には、git rm --cached を使います。
--cached をつけるとローカルのファイルは削除されず、追跡対象からだけ外れます。

git rm --cached debug.log
git commit -m "Remove debug.log from tracking"

この操作を行うと、debug.log 自体はローカルには残るものの、リポジトリ上では削除したものとして扱われるようになります。

.gitignoreによる不要ファイルの管理

追跡対象から外したいファイルは、今後もコミットしないようにしたほうが安全です。
そのために用いられるのが .gitignore ファイルです。
このファイルに、無視したいファイル名やフォルダ名を記述しておくと、gitはそこに書かれている対象を自動的に無視するようになります。

たとえば、以下のように .gitignore に書くと、拡張子が .log のファイルがすべて無視されます。

*.log

また、特定のフォルダだけ無視したい場合は次のように書きます。

logs/

一度コミットされてしまったファイルは、そのままでは無視対象になりません。
先ほどの git rm --cached などを使って追跡を外し、改めて .gitignore にルールを追加するのが一般的な流れです。

削除を取り消す(復元する)方法

「ファイルを削除してコミットしたものの、本当は消してはいけなかった」と後から気づく場合もあるでしょう。
そんなときは、過去のコミットをチェックアウトしたり、git restore を使ったりして復元する方法があります。

直前の削除を取り消す

削除操作をコミット前に気づいたのであれば、ステージングを取り消すだけで大丈夫です。

git restore --staged <ファイル名>

これは「ステージングエリアの変更」を取り消すコマンドです。
まだローカル上でファイルが消えてしまっている場合は、さらに以下のようにすることでファイルをワークツリーにも戻せます。

git restore <ファイル名>

コミット後の取り消し

もし削除をすでにコミットしてしまった場合でも、前のコミットに戻すことでファイルを復元できます。
方法としては git revert を使うのが代表的です。

git revert <コミットID>

指定したコミットの内容を「打ち消す」コミットを新たに作り、削除をなかったことにします。
リポジトリの履歴がきちんと残るため、安全に取り消せるのがメリットです。

過去のコミットからファイルを完全に消したい場合

「誤ってパスワードや機密情報を含むファイルをコミットしてしまった。
しかもその履歴をリポジトリから丸ごと削除したい」という状況では、少し難易度が上がります。

通常、gitは過去の履歴を大切に保存しているので、簡単に元データが消えることはありません。
しかし機密情報などは履歴上に残したくない場合もあります。
そのようなときは、git filter-branch やそれに類するコマンドを使って「履歴ごと編集」する方法がとられます。

この操作は履歴を書き換えるため、共同作業中のプロジェクトでは慎重に行う必要があります。
他のメンバーがすでにリポジトリをクローンしている場合は、リモートリポジトリの再構築や強制プッシュが必要になることがあります。

実行例のイメージ

以下は git filter-branch を使って、特定ファイルを過去のコミットから取り除く例のイメージです。

git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch <機密ファイル>' \
  --prune-empty --tag-name-filter cat -- --all

詳しいオプションは長くなるので省略しますが、このような操作により、過去にさかのぼってファイルを削除することができます。
ただし扱いが難しいため、実務ではあらかじめ機密情報や不要ファイルをコミットしないように注意するほうが賢明です。

実務での活用シーン

余計なログファイルをうっかりコミットした場合

開発作業をしていると、動作確認用に出力したログファイルや一時ファイルをうっかりコミットしてしまうことがよくあります。
これらを削除する場合、単にローカルから消すだけではなく、git rm --cached.gitignore を活用して、再発防止まで含めた対応が重要です。

不要になったライブラリや画像を整理したい場合

プロジェクトが成長していくと、過去に導入したライブラリや大量の画像が不要になるケースがあります。
これらを一括で削除するときには、git rm -r を使うと便利です。
ただし一気にファイルが消えるリスクがあるので、どのディレクトリを消すか必ず確認しましょう。

コミット履歴の肥大化を防ぎたい場合

巨大なファイルや大量のバイナリデータをコミットしていると、リポジトリのサイズが膨らみ、クローンにも時間がかかるようになります。
そこで、誤ってコミットされた大きなファイルを削除し、履歴からも消すことでリポジトリのサイズ削減を図ることができます。
この場合には先ほど述べた git filter-branch などを検討するとよいでしょう。

ファイルを削除する前に確認しておきたいポイント

初心者の皆さんは「削除する」という行為に対して少し不安を感じることがあるかもしれません。
ここではファイルを削除する前に、確認しておきたいポイントを挙げます。

1. 本当に不要なファイルかどうか確認する

重要なファイルを誤って削除すると、チーム全体の作業に影響が出るかもしれません。

2. 取り戻したいときの方法を把握しておく

git restoregit revert などで復元できるかどうか、ざっくり理解しておくと安心です。

3. 削除履歴をコミットしてからプッシュするタイミング

チームメンバーと同時開発中であれば、タイミングを合わせる必要がある場合もあります。

これらの点を前もって考えておけば、不要なトラブルを避けられるでしょう。

削除がプロジェクト全体に大きく影響する場合は、あらかじめチーム内で相談を行ってから対応すると安心です。

まとめ

gitでファイルを削除する際は、git rmgit rm --cached を使うことでリポジトリの追跡情報ごと整理できます。
また、コミット後に削除したものを取り消すには、git restoregit revert、さらには git filter-branch など、状況に応じたさまざまなコマンドが用意されています。

  • ローカルからも消したいときは git rm
  • ローカルには残したいが追跡から外すときは git rm --cached
  • 大きなファイルや機密情報を過去の履歴から消したい場合は git filter-branch などを検討
  • 削除を取り消す方法としては、git restoregit revert がある

ファイルの削除ひとつとっても、実務ではいろいろなケースが発生します。
しかし基本の仕組みさえ理解しておけば、万が一のときも慌てずに対処できるはずです。

ぜひ本記事の内容を参考に、不要なファイルの整理や機密情報の扱いに注意しながら、よりスムーズに開発を進めてみてください。

Gitをマスターしよう

この記事で学んだGitの知識をさらに伸ばしませんか?
Udemyには、現場ですぐ使えるスキルを身につけられる実践的な講座が揃っています。