And*_*zos 454 git git-add git-stage git-rm
假设我的git repostiory中有一个文件叫做foo.
假设它已被删除rm(不是git rm).然后git状态将显示:
Changes not staged for commit:
deleted: foo
Run Code Online (Sandbox Code Playgroud)
如何暂存此单个文件?
如果我尝试:
git add foo
Run Code Online (Sandbox Code Playgroud)
它说:
'foo' did not match any files.
Run Code Online (Sandbox Code Playgroud)
Woo*_*ble 473
使用git rm foo阶段性删除该文件.(这也将删除文件系统中的文件,如果以前没有删除过.当然,它可以从git中恢复,因为之前已经签入过.)
要将文件暂存以进行删除而不从文件系统中删除它,请使用 git rm --cached foo
Sai*_*esh 388
你可以做到git rm [FILE].
如果您想要删除多个文件而不执行git add -u每个文件,这将有所帮助.
Ian*_*non 147
要暂存所有手动删除的文件,您可以使用:
git rm $(git ls-files --deleted)
Run Code Online (Sandbox Code Playgroud)
要为此命令添加别名git rm-deleted,请运行:
git config --global alias.rm-deleted '!git rm $(git ls-files --deleted)'
Run Code Online (Sandbox Code Playgroud)
小智 33
添加所有准备好的已删除文件
git status -s | grep -E '^ D' | cut -d ' ' -f3 | xargs git add --all
Run Code Online (Sandbox Code Playgroud)
谢谢检查以确保
git status
Run Code Online (Sandbox Code Playgroud)
你应该好好去
Gna*_*yam 19
你可以使用这个命令
git add `git ls-files --deleted`
Run Code Online (Sandbox Code Playgroud)
pef*_*cio 13
从Git 2.0.0开始,git add也将删除文件.
<pathspec> ...
要添加内容的文件.可以给Fileglobs(例如*.c)添加所有>匹配文件.还可以给出一个前导目录名称(例如,添加dir/file1和dir/file2的目录)来更新索引以匹配整个目录的当前状态(例如,指定dir将不仅记录文件dir/file1已修改在工作树中,文件dir/file2已添加到工作树中,但也从工作树中删除了文件dir/file3.请注意,旧版本的Git用于忽略已删除的文件;如果您使用了--no-all选项想要添加修改或新文件但忽略删除的文件.
如果您想简单地将所有已删除的文件添加到阶段,那么您可以使用git add .
这是目前使用 git 最简单的方法v2.27.0。请注意,使用*和.是不同的方法。使用git add *只会添加当前存在的文件,而git add .也会暂存使用命令删除的文件rm。
这是显而易见的,但值得一提的是,当您使用git add ..
Ian Mackinnon 找到了答案,但使用 xargs 效果更好:
git ls-files --deleted -z | xargs -r0 git rm
Run Code Online (Sandbox Code Playgroud)
作为 git 别名:
git config --global alias.rm-deleted '!git ls-files --deleted -z | xargs -r0 git rm'
Run Code Online (Sandbox Code Playgroud)
git rm这使用带有 NUL 终止的 xargs(保证不会出现在路径中的唯一字节)以及如果文件列表为空则不运行的选项。
此语法也与鱼兼容。
对于那些在 powershell 中使用 git 2.x+ 的人:
foreach ($filePath in (git ls-files --deleted)) { git add "$filePath" }
Run Code Online (Sandbox Code Playgroud)