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 もすべて削除するからです。

詳細については、 gitglossary(7) の「pathspec」エントリを参照してください。

-f
--force

Override the up-to-date check.

-n
--dry-run

Don’t actually remove any file(s). Instead, just show if they exist in the index and would otherwise be removed by the command.

-r

Allow recursive removal when a leading directory name is given.

--

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

--cached

Use this option to unstage and remove paths only from the index. Working tree files, whether modified or not, will be left alone.

--ignore-unmatch

Exit with a zero status even if no files matched.

--sparse

Allow updating index entries outside of the sparse-checkout cone. Normally, git rm refuses to update index entries whose paths do not fit within the sparse-checkout cone. See git-sparse-checkout(1) for more.

-q
--quiet

git rm normally outputs one line (in the form of an rm command) for each file removed. This option suppresses that output.

--pathspec-from-file=<file>

Pathspec is passed in <file> instead of commandline 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

リポジトリはスーパープロジェクトの .git ディレクトリ内にあるため、gitfileを使用するサブモジュール(つまり、Gitバージョン1.7.8以降で複製されたもの)のみが作業ツリーから削除されます。 サブモジュール(またはその中にネストされているものの1つ)がまだ .git ディレクトリを使用している場合、 git rm はサブモジュールの履歴を保護するためにサブモジュールのgitディレクトリをスーパープロジェクトのgitディレクトリに移動します。 存在する場合は、 gitmodules(5) ファイルの submodule.<name> セクションも削除され、そのファイルがステージングされます(--cached または -n が使用されている場合を除く)。

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