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

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

-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>

パススペックは、コマンドライン引数の代わりに <file> で渡されます。 <file> が正確に - の場合、標準入力が使用されます。 パススペック要素は、LFまたはCR/LFで区切られます。 パススペック要素は、構成変数 core.quotePath で説明されているようにクォートできます(git-config(1)を参照)。 --pathspec-file-nul および グローバルの --literal-pathspecs も参照してください。

--pathspec-file-nul

--pathspec-from-file でのみ意味があります。 パススペック要素はNUL文字で区切られ、他のすべての文字は文字通りに解釈されます(改行と引用符を含む)。

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

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 が使用されている場合を除く)。

HEADがインデックスに記録されているものと同じであり、追跡中のファイルが変更されておらず、無視されない追跡中でないファイルがサブモジュールの作業ツリーに存在しない場合、サブモジュールは最新であると見なされます。 無視されたファイルは消耗品と見なされ、サブモジュールの作業ツリーの削除を停止しません。

あなたが削除をコミットせずにサブモジュールのローカルチェックアウトのみを作業ツリーから削除する場合は、代わりに 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