SYNOPSIS

git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch]
       [--quiet] [--pathspec-from-file=<file> [--pathspec-file-nul]]
       [--] [<pathspec>...]

DESCRIPTION

pathspecにマッチするファイルを、 インデックスから、 または作業ツリーとインデックスの両方から削除します。 git rm は、作業ディレクトリだけからファイルを削除することはありません。 (作業ツリーからのみファイルを削除し、それをインデックスに保持するオプションはありません。必要に応じて、 /bin/rm を使用してください。) 削除されるファイルはブランチの先端と同一である必要があり、インデックスにその内容の更新がステージングされていない状態である必要があります。 ただし、 このデフォルトの動作は -f オプションでオーバーライドできます。 --cached が指定されている場合、 ステージングされたコンテンツはブランチの先端またはディスク上のファイルのいずれかに一致する必要があり、 ファイルをインデックスからのみ削除できます。 スパース・チェックアウトが使用されている場合(git-sparse-checkout(1) を参照)、 git rm はスパース・チェックアウト・パターン内のパスのみを削除します。

OPTIONS

<pathspec>...

削除するファイル。先頭のディレクトリ名(たとえば、削除する dir/file1dir/file2dir)を指定して、ディレクトリ内のすべてのファイル削除でき、そして、 -r オプションを明示的に指定する必要がありますが、再帰的にすべてのサブディレクトリを削除できます。

このコマンドは、Gitに認識されているパスのみを削除します。

ファイルグロブはディレクトリの境界を越えて一致します。 したがって、2つのディレクトリ dd2 が与えられた場合、 git rm 'd*' と git rm 'd/*' は異なります。前者はディレクトリ d2 もすべて削除するからです。

For more details, see the <pathspec> entry in gitglossary(7).

-f
--force

更新チェックをオーバーライドします。

-n
--dry-run

実際にファイルを削除することはありません。 代わりに、 それらのファイルがインデックスに存在するかどうか、 そしてもしこのコマンドが実行された場合に削除されるかどうかを表示するだけです。

-r

先頭のディレクトリ名が指定されている場合は、再帰的な削除を許可します。

--

このオプションは、コマンドラインオプションをファイルのリストから分離するために使用できます(ファイル名がコマンドラインオプションと間違えられる可能性がある場合に便利です)。

--cached

このオプションを使用して、インデックス分のみパスをステージング解除して削除します。作業ツリーファイルは、変更されているかどうかに関係なく、そのまま残されます。

--ignore-unmatch

一致するファイルがない場合にも、ステータスがゼロで終了(exit)します。

--sparse

スパース・チェックアウト・コーンの外側でインデックス・エントリを更新できるようにします。 通常、 git rm は、パスがスパース・チェックアウト・コーン内に収まらないインデックス・ エントリの更新を拒否します。 詳細については、git-sparse-checkout(1) を参照してください。

-q
--quiet

git rm は通常、削除されたファイルごとに1行(rm コマンドの形式で)を出力します。 このオプションは、その出力を抑制します。

--pathspec-from-file=<file>

Pathspec is passed in <file> instead of args. If <file> is exactly - then standard input is used. Pathspec elements are separated by LF or CR/LF. Pathspec elements can be quoted as explained for the configuration variable core.quotePath (see git-config(1)). See also --pathspec-file-nul and global --literal-pathspecs.

--pathspec-file-nul

Only meaningful with --pathspec-from-file. Pathspec elements are separated with NUL character and all other characters are taken literally (including newlines and quotes).

ファイルシステムから消えたファイルの削除

git rm には、ファイルシステムから消えたパスのみをインデックスから削除するオプションはありません。 ただし、ユースケースに応じて、実行できる方法がいくつかあります。

git commit -a の使用

次回のコミットで、作業ツリー内の追跡対象ファイルのすべての変更を記録し、作業ツリーから削除されたファイルのすべての削除を(git rm ではなく、) rm で記録する場合は、すべての削除を自動的に通知して記録するため、 git commit -a を使用します。 git add -u を使用してコミットせずに同様の効果を得ることもできます。

git add -A の使用

ベンダーブランチの新しいコードドロップを受け入れる場合は、パスの削除と新しいパスの追加、および既存のパスの変更の両方を記録する必要があります。

通常、最初に以下のコマンドを使用して、追跡中のすべてのファイルを作業ツリーから削除します:

git ls-files -z | xargs -0 rm -f

次に、作業ツリーで新しいコードを解凍(untar)します。または、変更を作業ツリーに「rsync」することもできます。

その後、作業ツリーのすべての削除、追加、および変更を記録する最も簡単な方法は以下のとおりです:

git add -A

git-add(1) 参照。

Other ways

あなたが本当にやりたいのは作業ツリーに存在しなくなったファイルをインデックスから削除することだけである場合(おそらく、作業ツリーが汚れているために git commit -a を使用できない)、以下のコマンドを使用します:

git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached

SUBMODULES

Only submodules using a gitfile (which means they were cloned with a Git version 1.7.8 or newer) will be removed from the work tree, as their repository lives inside the .git directory of the superproject. If a submodule (or one of those nested inside it) still uses a .git directory, git rm moves the submodules git directory into the superprojects git directory to protect the submodule’s history. If it exists the submodule.<name> section in the gitmodules(5) file will also be removed and that file will be staged (unless --cached or -n are used).

A submodule is considered up to date when the HEAD is the same as recorded in the index, no tracked files are modified and no untracked files that aren’t ignored are present in the submodule’s work tree. Ignored files are deemed expendable and won’t stop a submodule’s work tree from being removed.

あなたが削除をコミットせずにサブモジュールのローカルチェックアウトのみを作業ツリーから削除する場合は、代わりに git-submodule(1)deinit を使用してください。 サブモジュールの削除の詳細については、 gitsubmodules(7) も参照してください。

EXAMPLES

git rm Documentation/\*.txt

Documentation ディレクトリとそのサブディレクトリの下にあるすべての *.txt ファイルをインデックスから削除します。

注意: この例では、アスタリスク(*)がシェルからクォートされていることに注意してください。これにより、シェルではなくGitが、Documentation/ ディレクトリの下にあるファイルとサブディレクトリのパス名を展開できるようになります。

git rm -f git-*.sh

この例では、シェルでアスタリスクを展開できるため(つまり、あなたはファイルを明示的にリストしているため)、 subdir/git-foo.sh は削除されません。

BUGS

スーパープロジェクトの更新により、入力されたサブモジュールが削除されるたびに(たとえば、削除の前後でコミットを切り替える場合)、古いサブモジュールのチェックアウトは古い場所に残ります。古いディレクトリの削除は、gitfileを使用している場合にのみ安全です。そうしないと、サブモジュールの履歴も削除されます。 この手順は、サブモジュールの再帰的な更新が実装されている場合は廃止されます。

SEE ALSO

GIT

Part of the git(1) suite