SYNOPSIS
gitrm
[-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/file1
やdir/file2
のdir
)を指定して、ディレクトリ内のすべてのファイル削除でき、そして、-r
オプションを明示的に指定する必要がありますが、再帰的にすべてのサブディレクトリを削除できます。このコマンドは、Gitに認識されているパスのみを削除します。
ファイルグロブはディレクトリの境界を越えて一致します。 したがって、2つのディレクトリ
d
とd2
が与えられた場合、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 anrm
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 variablecore.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