1. ホーム
  2. 記事一覧
  3. Git管理のファイル削除はGit rmで。削除の基本を解説!

2024.06.17

Git管理のファイル削除はGit rmで。削除の基本を解説!

はじめに

Git運用をしている開発でのファイルやディレクトリの削除はどのように行なっていますか?MacのFinderやWindowsのエクスプローラーで手軽に削除できますが、Git運用をしているのであれば、git rmコマンドを使用しての削除がおすすめです。git rmはGitのステージングエリアからファイルを削除し、ワーキングツリーからもファイルを削除することが可能です。このコマンドを使用してファイルを削除することのメリットや、実際の活用方法について知っておくことで、今後の開発現場においてスムーズな作業を行うことができます。

Gitコマンドはgit commitなどの基本コマンドしか使ったことがない方や、これからGitを使って開発をスタートする方に向けて、この記事ではgit rmを解説していきます。

この記事を読むことで、git rmでのファイル削除の基本を学べます!さまざまなGitコマンドを習得して、Gitマスターを目指しましょう!

ワーキングツリーとステージングエリアについて

git rmの解説に入る前に、ワーキングツリーとステージングエリアについて学習しておきましょう。これらを知ることにより、この後の解説の理解度が深まります。

ワーキングツリーとは、ローカルリポジトリにおいて、開発者が実際に作業する場所のことです。身近なもので例えると、会社内の自分のデスクで仕事をするイメージです。自分のデスクで書類の作成や修正を行うように、ワーキングツリーでは開発者がプログラムファイルの作成やコードの修正などを行います。

ワーキングツリーでの作業が一通り完了したら、次にgit addを実行して作業済みのファイルをステージングエリアに登録します。ステージングエリアは、次にコミットされる変更が一時的に保存される場所です。変更とは、git addした際のリポジトリの状態のスナップショットです。こちらも身近なもので例えると、会社内のデスクで作成し完成した書類を、承認担当の上司へ提出するイメージです。

ワーキングツリーで作業したファイルをステージングエリアに登録することで、ローカルリポジトリにコミットし、リモートリポジトリへgit pushするといった一連の作業を行うことができます。

より詳しいGitの構造については、以下の記事で詳しく解説しています。

https://envader.plus/article/68

git rmとは

git rmコマンドは、Gitリポジトリのワーキングツリーとステージングエリアからファイルを削除するコマンドです。もう少し詳細に説明すると、ワーキングツリーから指定したファイルを物理的に削除し、その削除情報をステージングエリアに記録します。この状態で次にコミットを実行すると、ステージングエリアに登録されている記録を元に、「ファイルが削除された」という情報がリポジトリに反映されます。これにより、以降の開発作業で、該当のファイルが「いつ削除されたか」といった履歴を追うことが容易になります。

git rmで削除できるファイルは、現在作業中のHEADと一致している必要があります。これは、git addコマンドを使用してインデックスされた状態と、ワーキングツリーの内容が同じである場合に、git rmが実行されファイルが削除されるということです。git addされていない未確定のファイル(作業途中のファイル)を誤って削除しないための、Gitの安全装置のようなものです。

git rmを使うメリット

git rmはGitリポジトリのワーキングツリーとステージングエリアからファイルを削除するコマンドとわかりましたが、なぜわざわざこのコマンドを使用するのか?と疑問に感じる方もいるかと思います。

rmコマンドやFinderなどで単にファイルを削除しただけでは、Gitのステージングエリアにその変更は記録されず、Gitの追跡対象としてファイルの履歴が残り続けます。この場合、ファイルを削除した後に再度git addを実行して、ファイルの削除情報をステージングエリアに記録する必要があります。git rmは1回の実行でこの作業を行うことが可能なため、作業の効率化が図れます。また、git rmは現在のHEADとワーキングツリーが異なるとファイル削除ができないため、作業中の重要なファイルを誤って削除するリスクを避けることができます。一方、rmコマンドではこの確認ができないため、重要なファイルを誤って削除する恐れがあります。

git rmコマンドの注意点

git rmで削除したファイルをコミットした後は、該当のファイルを簡単に復旧することはできなくなります。git rmはワーキングツリーとステージングエリアからファイルを削除するので、Gitの履歴からそのファイルを直接復旧することが難しくなります。そのため、慎重な作業が必要な場面では、コマンド実行前にリポジトリのバックアップを取っておくことをお勧めします。

git rmコマンドの開発現場での活用例

これまでにgit rmコマンドの基本的な役割とメリットについて学んできました。日常の開発作業においては、ファイルの削除やディレクトリ構造の変更など、多岐にわたる場面で活用されています。ここでは、実際の開発現場での具体的な活用例を2つ紹介します。

誤ってステージングエリアに追加したファイルのGitの追跡を外す

開発中に、誤って不要なファイルをステージングエリアに追加してしまうことはよくあります。この場合、git rmコマンドを使用して、ワーキングツリーとステージングエリアから不要なファイルを削除します。

プロジェクトのディレクトリ構造を変更する

プロジェクトの規模が大きくなると、ディレクトリ構造の見直しが必要になることがあります。古いディレクトリやその中のファイルを削除して、新しい構造に再編成する際に、git rm -rコマンドが役立ちます。このコマンドを使用すると、ディレクトリ内のすべてのファイルとディレクトリ自体を削除することができます。

git rm -r-rはディレクトリを削除するためのオプションです。

git rmコマンドは下記のページでも紹介しています。間違えてコミットしたファイルを、後から追跡対象外にする方法を詳しく解説していますので、併せてご覧ください。

https://envader.plus/article/398

git rmの使い方

ここまでgit rmコマンドの基本や、実際の開発ではどのように使用されているかを知ることができました。次に、git rmを使用してファイルやディレクトリを削除する方法を見ていきましょう。以下は、git rmを使用してファイルを削除する基本的な手順です。

git rm [削除対象のファイル名]

ディレクトリを削除する際は-rオプションを追加します。-rオプションは次のセクション「git rmのオプション紹介」で詳しく説明します。

git rm -r [削除対象のディレクトリ名]

git rmのオプション紹介

項目説明
-f, --forcegit rmコマンドを強制的に実行
-n, --dry-rungit rmコマンドをテスト実行
-rターゲットにしているディレクトリを削除
--cachedステージングエリアのファイルのみを削除

-f, --force

git rmコマンドを強制的に実行します。

 git rm -f [削除対象のファイル名]

新規にファイルを作成し、ステージングエリアにgit addしたのみのファイルをgit rmコマンドで削除しようとすると、通常は以下のような警告が発生します。これは未コミットの変更を失わないようにするためのGitの安全装置です。

git rm sample-1.txt 
error: the following file has changes staged in the index:
    sample-1.txt
(use --cached to keep the file, or -f to force removal)

このような場合は、-fオプションを追加することでファイルの削除が可能です。ただし、指定したファイルが正しいかをよく確認した上で、コマンドを実行することを推奨します。以下の出力結果は、強制的にコマンドを実行し、未コミットのファイルが削除されたことを示しています。

git rm -f sample-1.txt 
rm 'sample-1.txt'

-n, --dry-run

git rmコマンドをテスト実行し、実際にはファイルの削除は行いません。コマンド実行前に、どのようにコマンドが実行されるかを確認したい際に利用されます。コマンド実行内容を確認しながら、より安全にgit rmを実行するためのオプションです。

git rm -n [削除対象のファイル名]

以下はコマンドの実行結果です。指定したファイルが削除されるという出力内容が表示されますが、git rm -nを実行後にディレクトリの中を調べると、対象ファイルは削除されずに残ったままです。

git rm -nf sample-1.txt
rm 'sample-1.txt'
ls
sample-1.txt  sample-2.txt

-r

-rオプションを追加すれば、ディレクトリを削除することも可能です。ディレクトリ内に格納されているファイルごと削除します。

git rm -r [削除対象のディレクトリ名]

※空のディレクトリはGitの追跡対象として登録できないため、ファイルが格納されているディレクトリのみがこのコマンドの対象となります。

未コミットのファイルが格納されているディレクトリを削除する場合は、-fオプションを追加して以下のようにコマンドを実行します。

git rm -rf sample-1/
rm 'sample-1/sample-1.txt'
rm 'sample-1/sample-2.txt'

--cached

Gitのステージングエリアの記録のみ削除し、ワーキングディレクトリにはファイルを残します。

git rm --cached [削除対象のファイル名]

このオプションを使う場面としては以下のような、特定のファイルをGitの追跡対象から外したいが、ワーキングツリーにファイル自体を残しておきたい場面で使用されます。

  • 誤ってステージングエリアにgit addしてしまったファイルを追跡対象から外したいが、ワーキングツリーにはファイルは残しておきたい
  • 開発途中で特定のファイルを.gitignoreに追加し、今後はGitの追跡対象から外して、ステージングエリアに残っている追跡記録のみを削除したい

以下はコマンドの実行結果です。コマンド実行後、ステージングエリアの対象ファイルの情報は削除されますが、ワーキングツリーにはファイルは残ったままです。

git rm --cached sample-log.txt
rm 'sample-log.txt'
git status
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        sample-log.txt  ←追跡対象外ファイルとなっている
ls
README.md  sample.log  sample-1.txt  sample-2/  sample-2.txt  sample-log.txt  ←ファイル自体は残ったままとなっている

この記事で学んだこと

git rmについて

git rmコマンドは、ワーキングツリーから指定したファイルを物理的に削除し、その削除情報をステージングエリアに記録します。この状態で次にコミットを実行すると、ステージングエリアに登録されている記録を元に「ファイルが削除された」という情報がリポジトリに反映されます。この一連の作業により、リポジトリから不要なファイルを削除することができます。

git rmは、コミットされていない未確定のファイルに対して、デフォルトではコマンドを実行できないようになっています。これは誤って重要なファイルを削除しないためのGitの安全装置です。その他にも様々なオプションが用意されており、開発者の意図するファイル削除を実現できます。

参考資料

以下のリンクは、この記事で説明した手順や概念に関連する参考資料です。より詳しく学びたい方は、ぜひご参照ください。

【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話

プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。

「フリーランスエンジニア」

近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。

「成功する人とそうでない人の違いは何か?」

私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。

比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。

多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、

note記事3000いいね超えの殿堂記事 今すぐ読む

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事