リポジトリからファイルを削除する - Git による版管理環境を構築する

SPECIAL


リポジトリからファイルを削除する

リポジトリからファイルを削除したい場合には、まずは次のようにして、そのファイルを削除対象としてステージングします。

git rm ファイル名

ここで、対象のファイルが既にステージングされた状態だった場合には、次のようなメッセージが表示されて、削除操作がいったん打ち切られます。

error: 'test.txt' has changes staged in the index
(use --cached to keep the file, or -f to force removal)

このように、ステージングされた状態のファイルをリポジトリから削除したい場合には、次のように "-f" オプションをつけて "git rm" を再実行します。

git rm -f ファイル名

これで、指定したファイルが削除対象として、ステージングされました。

リポジトリ内のこのファイルについては、次のコミット時に削除されます。

 

なお、この "git rm" を実施したとき、ここで指定したファイルは、ワーキングコピーからも削除されているようでした。

このような状態で "git status" を実行してみると、次のような状態になっています。

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: test.txt
#

もし、削除しないことにしたい場合には、ここに記されているように "git reset HEAD ファイル名" として、削除対象としてステージングされた状態を取り下げます。

ただ、ステージングされた状態を取り下げたとしても "git rm" で削除されたワーキングコピーは、そのまま削除されているようでした。実際、削除されたファイルはなく、"git status" では次のようなレポートが得られました。

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: test.txt
#

この説明にあるように、削除したファイルを元に戻したい場合には、"git checkout -- ファイル名" として、リポジトリからワーキングコピーへそのファイルをチェックアウトする必要があるようでした。

 

ファイルを削除対象としてステージングして、実際のファイルは削除したくない場合には、"git rm" 実効の際に、次のように "--cached" オプションを指定しておきます。

git rm --cached ファイル名

これで、削除対象としてステージングしつつ、元のファイルをそのまま残すことができました。

この状態を "git status" で確認すると、次のような感じになります。

# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# deleted: test.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# test.txt

このように、操作したファイルについて、削除対象としてステージングされていることと、リポジトリへの追加(トラッキング)対象になっていないことの、2 つの状態であることが通知されました。

 

目次