次にファイルの削除方法を学びます。

単にワーキングツリーからあるファイルを削除しても良いのですが、コミットしない限りインデックスには残り続けるので、何かのタイミングで消したはずのファイルが復活して問題を起こします。
そこで次の git rm コマンドを使ってワーキングツリーとインデックスから同時に消しておいた方が無難です。

ワーキングツリーとインデックスからファイルを同時に消す:
git rm <ファイル>

※インデックスからは消したいけど、ワーキングツリーにはファイルを残したい場合は --cached オプションを付けます

では演習をしてみましょう。
現在は次の状態(状態 13)となっています。


状態 13 (再掲)


ワーキングツリー
hoge.txt
a
piyo.txt
AB


インデックス
hoge.txt
ab
piyo.txt
AB


ローカルリポジトリ「gitlocal」
HEAD
hoge.txt
ab
piyo.txt
AB
"piyo.txtを更新(S9)"
HEAD~
hoge.txt
ab
piyo.txt
A
"hoge.txtを更新(S8)"
HEAD~2
hoge.txt
a
piyo.txt
A
"piyo.txtを追加(S5)"
HEAD~3
hoge.txt
a
"hoge.txtを追加(S4)"

では piyo.txt を削除してみましょう。
するとワーキングツリーとインデックスから piyo.txt が消えて次の状態 14 となります。
ただしまだコミットしていないので HEAD には piyo.txt は残っています。


状態 14


ワーキングツリー
hoge.txt
a


インデックス
hoge.txt
ab


ローカルリポジトリ「gitlocal」
HEAD
hoge.txt
ab
piyo.txt
AB
"piyo.txtを更新(S9)"
HEAD~
hoge.txt
ab
piyo.txt
A
"hoge.txtを更新(S8)"
HEAD~2
hoge.txt
a
piyo.txt
A
"piyo.txtを追加(S5)"
HEAD~3
hoge.txt
a
"hoge.txtを追加(S4)"

さて消したファイルを復元したい場合は、ファイル内容の復元で学んだ restore コマンドを使って復元できます。
ただしインデックスからも対象のファイルは消えてますので以下のように一旦アンステージしてからファイルを復元する必要があります。

git restore --staged <ファイル名>
git restore <消したファイル名>

では試しに piyo.txt を HEAD から復元して状態 15 にしてみましょう。
当然ですがこれは元の状態 13 と同じ状態です。


状態 15 ( = 状態13 )


ワーキングツリー
hoge.txt
a
piyo.txt
AB


インデックス
hoge.txt
ab
piyo.txt
AB


ローカルリポジトリ「gitlocal」
HEAD
hoge.txt
ab
piyo.txt
AB
"piyo.txtを更新(S9)"
HEAD~
hoge.txt
ab
piyo.txt
A
"hoge.txtを更新(S8)"
HEAD~2
hoge.txt
a
piyo.txt
A
"piyo.txtを追加(S5)"
HEAD~3
hoge.txt
a
"hoge.txtを追加(S4)"

演習を続けます。
再び git rm で piyo.txt を消してから "piyo.txt を削除(S16)" というコメントでコミットして下さい。
すると次の状態 16 に変わります。


状態 16


ワーキングツリー
hoge.txt
a


インデックス
hoge.txt
ab


ローカルリポジトリ「gitlocal」
HEAD
hoge.txt
ab
"piyo.txtを削除(S16)"
HEAD~
hoge.txt
ab
piyo.txt
AB
"piyo.txtを更新(S9)"
HEAD~2
hoge.txt
ab
piyo.txt
A
"hoge.txtを更新(S8)"
HEAD~3
hoge.txt
a
piyo.txt
A
"piyo.txtを追加(S5)"
HEAD~4
hoge.txt
a
"hoge.txtを追加(S4)"