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

NAME

git-rm - 作業ツリーおよびインデックスからファイルを削除する

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/file2を削除するdir)を指定して、ディレクトリ内のすべてのファイルと、再帰的にすべてのサブディレクトリを削除できますが、これには明示的に-rオプションを指定する必要があります。

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

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

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

-f
--force

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

-n
--dry-run

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

-r

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

--

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

--cached

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

--ignore-unmatch

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

--sparse

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

-q
--quiet

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

--pathspec-from-file=<file>

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

--pathspec-file-nul

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

ファイルシステムから消えたファイルを削除する

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

「git commit -a」の使用

次のコミットで、作業ツリーで追跡されているファイルのすべての変更を記録し、rmgit rmではなく)で作業ツリーから削除されたすべてのファイルの削除を記録する場合は、git commit -aを使用してください。これにより、すべての削除が自動的に検出および記録されます。git add -uを使用すると、コミットせずに同様の効果を得ることもできます。

「git add -A」の使用

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

通常、まずこのコマンドを使用して、作業ツリーから追跡されているすべてのファイルを削除します

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

次に、作業ツリーに新しいコードを解凍します。または、変更を作業ツリーに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.<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

git[1]スイートの一部

scroll-to-top