![](/_next/image?url=https%3A%2F%2Fstorage.googleapis.com%2Fenvader-article-images%2Fgit-rm%2Fgit_rm-001.png&w=3840&q=75)
はじめに
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, --force | git rmコマンドを強制的に実行 |
-n, --dry-run | git 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の安全装置です。その他にも様々なオプションが用意されており、開発者の意図するファイル削除を実現できます。
参考資料
以下のリンクは、この記事で説明した手順や概念に関連する参考資料です。より詳しく学びたい方は、ぜひご参照ください。
-
サル先生のGit入門 Gitの基本 ワークツリーとインデックス
-
Git公式 - git rm
-
Git公式 - Git の基本 - 変更内容のリポジトリへの記録
-
ATLASSIAN git rm
https://www.atlassian.com/ja/git/tutorials/undoing-changes/git-rm
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
![IT未経験者必見 USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話](/_next/image?url=%2Fcommons%2Fbanners%2Fbanner-note01.jpg&w=3840&q=75)
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
![RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可](/_next/image?url=%2Fcommons%2Fbanners%2Fbanner-raretech-trial-lesson01.jpg&w=3840&q=75)
関連記事
![](/_next/image?url=%2Fcommons%2Fimages%2Fthumbnail-note.jpg&w=3840&q=75)
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
![](/_next/image?url=https%3A%2F%2Fstorage.googleapis.com%2Fenvader-article-images%2Fgitignore%2F001.png&w=3840&q=75)
2024.05.29
Gitで間違ってコミットしたファイルを後から無視する方法 .gitignoreの設定
ここでは、架空のプロジェクト「AwesomeProject」での失敗談を元に、誤って追跡されたファイルを後から管理外にする方法を解説します。
- git
![](/_next/image?url=https%3A%2F%2Fstorage.googleapis.com%2Fenvader-article-images%2Fgit-blame%2F001.jpg&w=3840&q=75)
2024.06.02
コードを書いたのが誰かわかる超便利コマンド「git blame」の使い方を解説
コードの変更を誰が行ったのか簡単に確認したい!という方向けに、この記事では「git blame」を解説します。
- git
![](/_next/image?url=https%3A%2F%2Fstorage.googleapis.com%2Fenvader-article-images%2Fgit-stash-git-diff%2F002.png&w=3840&q=75)
2023.10.29
Gitの作業効率化!git stash と git diff の使い方を解説
ここでは表題の`git diff`, `git stash` に加え、`git status`という3つの重要なコマンドをそれぞれの使い方や役割、利点について解説します。
- インフラエンジニア
- git