日本語 ▾ トピック ▾ 最新バージョン ▾ git-rm は 2.43.0 で最終更新されました

名前

git-rm - 作業ツリーとインデックスからファイルを削除

概要

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

説明

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

オプション

<pathspec>…​

削除するファイル。先頭のディレクトリ名(例:`dir` で `dir/file1` と `dir/file2` を削除)を指定すると、そのディレクトリ内のすべてのファイルとすべてのサブディレクトリを再帰的に削除できますが、これには `-r` オプションを明示的に指定する必要があります。

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

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

詳細については、gitglossary[7]pathspec エントリを参照してください。

-f
--force

最新のチェックを上書きします。

-n
--dry-run

実際にファイルを削除しません。代わりに、それらがインデックスに存在し、そうでなければコマンドによって削除されるかどうかだけを表示します。

-r

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

--

このオプションは、コマンドラインオプションとファイルリストを分離するために使用できます(ファイル名がコマンドラインオプションと誤解される場合に便利です)。

--cached

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

--ignore-unmatch

ファイルが一致しなかった場合でも、終了ステータス0で終了します。

--sparse

スパースチェックアウトコーン外のインデックスエントリの更新を許可します。通常、`git rm` は、パスがスパースチェックアウトコーン内に収まらないインデックスエントリの更新を拒否します。詳細については、git-sparse-checkout[1] を参照してください。

-q
--quiet

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

--pathspec-from-file=<file>

pathspec はコマンドライン引数の代わりに `` から渡されます。`` が正確に `-` の場合、標準入力が使用されます。pathspec 要素は LF または CR/LF で区切られます。pathspec 要素は、設定変数 `core.quotePath` で説明されているように引用符で囲むことができます(git-config[1] を参照)。`--pathspec-file-nul` およびグローバルな `--literal-pathspecs` も参照してください。

--pathspec-file-nul

`--pathspec-from-file` と一緒に使用する場合のみ意味があります。pathspec 要素は NUL 文字で区切られ、他のすべての文字は文字通りに解釈されます(改行や引用符を含む)。

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

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

"git commit -a" の使用

次のコミットで、作業ツリー内の追跡ファイルのすべての変更と、`rm`(`git 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] を参照してください。

その他の方法

作業ツリーに存在しなくなったファイルをインデックスから削除したいだけの場合(おそらく作業ツリーがダーティであるため、`git commit -a` を使用できないため)、次のコマンドを使用してください。

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

サブモジュール

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

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

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

git rm Documentation/\*.txt

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

この例ではアスタリスク `*` がシェルから引用符で囲まれていることに注意してください。これにより、シェルではなくGitが `Documentation/` ディレクトリ下のファイル名とサブディレクトリを展開します。

git rm -f git-*.sh

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

バグ

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

関連項目

GIT

git[1] スイートの一部

scroll-to-top