假设我的git repostiory中有一个名为foo
的文件。
假设已使用rm
(不是git rm
)删除了该内容。然后git状态将显示:
Changes not staged for commit:
deleted: foo
如何暂存此单个文件?
如果我尝试:
git add foo
它说:
'foo' did not match any files.
答案 0 :(得分:452)
使用git rm foo
暂存文件以进行删除。 (这也将删除文件系统中的文件,如果它以前没有被删除。当然,它可以从git中恢复,因为它之前已经签入。)
要暂存文件以进行删除而不将其从文件系统中删除,请使用git rm --cached foo
答案 1 :(得分:367)
你可以git add -u
。
如果您想要删除多个文件,而不为每个文件执行git rm
,这将有所帮助。
答案 2 :(得分:134)
要暂存您可以使用的所有手动删除的文件:
git rm $(git ls-files --deleted)
要将此命令的别名添加为git rm-deleted
,请运行:
git config --global alias.rm-deleted '!git rm $(git ls-files --deleted)'
答案 3 :(得分:30)
添加所有准备好的已删除文件
git status -s | grep -E '^ D' | cut -d ' ' -f3 | xargs git add --all
谢谢检查以确保
git status
你应该好好去
答案 4 :(得分:11)
自Git 2.0.0起,git add
也将暂存文件删除。
< pathspec> ...
要添加内容的文件。 Fileglobs(例如* .c)可以添加全部>匹配文件。还可以给出一个前导目录名称(例如,添加dir / file1和dir / file2的目录)来更新索引以匹配整个目录的当前状态(例如,指定dir将不仅记录文件dir / file1已修改在工作树中,文件dir / file2已添加到工作树中,但也从工作树中删除了文件dir / file3。请注意,旧版本的Git用于忽略已删除的文件;请使用--no-all如果要添加已修改或新文件但忽略已删除的文件,则选项。
答案 5 :(得分:7)
您可以使用
git rm -r --cached -- "path/to/directory"
暂存已删除的目录。
答案 6 :(得分:3)
您可以使用此命令
git add `git ls-files --deleted`
答案 7 :(得分:1)
对于在powershell中使用git 2.x +的用户:
foreach ($filePath in (git ls-files --deleted)) { git add "$filePath" }
答案 8 :(得分:1)
Ian Mackinnon找到了答案,但是最好使用xargs:
git ls-files --deleted -z | xargs -r0 git rm
作为git别名:
git config --global alias.rm-deleted '!git ls-files --deleted -z | xargs -r0 git rm'
这使用带有NUL终止的xargs(保证唯一的字节不出现在路径中),并且如果文件列表为空,则选择不运行git rm
。
此语法也与鱼兼容。
答案 9 :(得分:1)
如果您只想将所有已删除的文件添加到 stage,则可以使用 git add .
这是目前使用 git v2.27.0
最简单的方法。请注意,使用 *
和 .
是不同的方法。使用 git add *
只会添加当前存在的文件,而 git add .
也会暂存使用 rm
命令删除的文件。
很明显但值得一提的是,当您使用 git add .
时,其他已修改的文件也会添加到暂存区。