假设我的 git 存储库中有一个名为foo.
foo
假设它已用rm(not git rm) 删除。然后 git status 将显示:
rm
git rm
Changes not staged for commit: deleted: foo
如何暂存此单个文件删除?
如果我尝试:
git add foo
它说:
'foo' did not match any files.
更新(9年后,哈哈):
这看起来已经在 git 2.x 中修复了:
$ git --version git version 2.25.1 $ mkdir repo $ cd repo $ git init . Initialized empty Git repository in repo/.git/ $ touch foo bar baz $ git add foo bar baz $ git commit -m "initial commit" [master (root-commit) 79c736b] initial commit 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 bar create mode 100644 baz create mode 100644 foo $ rm foo $ git status On branch master Changes not staged for commit: deleted: foo $ git add foo $ git status On branch master Changes to be committed: deleted: foo
从 Git 2.0.0 开始,git add也将暂存文件删除。
git add
Git 2.0.0 文档 - git-add
<路径规范>’ 要从中添加内容的文件。可以给出 Fileglobs(例如 .c)来添加所有匹配的文件。还可以给出一个前导目录名称(例如,添加 dir/file1 和 dir/file2 的 dir)以更新索引以匹配整个目录的当前状态(例如,指定 dir 将不仅记录文件 dir/file1 已修改在工作树中,文件 dir/file2 添加到工作树中,但也从工作树中删除了文件 dir/file3。 请注意,旧版本的 Git 过去常常忽略已删除的文件;如果您使用 –no-all 选项想要添加修改或新文件,但忽略已删除的文件。*
<路径规范>’
要从中添加内容的文件。可以给出 Fileglobs(例如 .c)来添加所有匹配的文件。还可以给出一个前导目录名称(例如,添加 dir/file1 和 dir/file2 的 dir)以更新索引以匹配整个目录的当前状态(例如,指定 dir 将不仅记录文件 dir/file1 已修改在工作树中,文件 dir/file2 添加到工作树中,但也从工作树中删除了文件 dir/file3。 请注意,旧版本的 Git 过去常常忽略已删除的文件;如果您使用 –no-all 选项想要添加修改或新文件,但忽略已删除的文件。*