我有一个Git repo,我已经删除了使用 rm
( not git rm
)的四个文件,我的Git状态如下所示:
# deleted: file1.txt
# deleted: file2.txt
# deleted: file3.txt
# deleted: file4.txt
如何从Git中删除这些文件,而无需手动浏览并添加如下所示的每个文件:
git rm file1 file2 file3 file4
理想情况下,我正在寻找与 git add .
相同的方式,如果可能的话 .
29 回答
添加系统别名以暂存已删除的文件作为命令
rm-all
UNIX
alias rm-all='git rm $(git ls-files --deleted)'
WINDOWS
doskey rm-all=bash -c "git rm $(git ls-files --deleted)"
注意
Windows需要安装
bash
.(另一种变化)
我想删除所有已经从磁盘文件中删除但从一个特定文件夹中删除的文件,而不保留其他文件夹 . 以下对我有用:
删除
git ls-files
命令列出的所有文件(-d仅显示已删除的文件) . 不适用于文件名或路径中包含空格的文件,但很容易记住适用于visual studio项目
当删除的文件路径有空格时很有用
我迄今发现的最灵活的解决方案是
并选择我想要暂存的所有已删除文件 .
(注意我通常在git中执行所有命令行,但是git处理删除的文件有点尴尬) .
即使您有大量要处理的文件,以下内容也可以使用:
您可能还想提交评论 .
有关详细信息,请参阅:Useful Git Scripts
在我删除了文件后,这对我有用 .
我需要相同的并使用git gui“stage changed”按钮 . 它还增加了所有 .
在“阶段改变”后,我做了“提交”......
所以我的工作目录又干净了 .
您可以使用
git add -u <filenames>
仅暂存已删除的文件 .例如,如果删除了文件
templates/*.tpl
,则使用git add -u templates/*.tpl
.需要
-u
才能引用存储库中存在但工作目录中不再存在的文件 . 否则,git add
的默认值是查找工作目录中的文件,如果指定文件,则've deleted there, it won't找不到它们 .对于Git 1.x
这告诉git自动暂存跟踪的文件 - 包括删除以前跟踪的文件 .
对于Git 2.0
分阶段整个工作树:
仅仅暂存当前路径:
可能是你在找什么..它对我有用..
您可以使用
要将已删除的文件添加到暂存区域,请提交它们
就像是
可能会这样做 .
如果您只是运行:
git将更新其索引,以便知道您删除的文件实际上应该是下一次提交的一部分 . 然后你可以运行“git commit”来检查那个变化 .
或者,如果您运行:
它将自动进行这些更改(以及任何其他更改)并提交它们 .
更新:如果您只想添加已删除的文件,请尝试:
你可能正在寻找-A:
这类似于git add -u,但也添加了新文件 . 这大致相当于hg的
addremove
命令(尽管移动检测是自动的) .仅暂存已删除的文件:
或者(xargs方式):
您可以alias首选命令集,以方便以后使用 .
删除实际文件之前或之后 .
通过使用带有'--all'或'--update'选项的git-add,您可能会得到比您想要的更多 . 新的和/或修改过的文件也将添加到索引中 . 我有一个bash别名设置,当我想从git中删除已删除的文件而不触及其他文件时:
已从文件系统中删除的所有文件都将添加到已删除的索引中 .
并不是真的很重要,但我不同意所选择的答案:
...如果已删除工作树中的相应文件,将从索引中删除文件,但它也会暂存已修改的跟踪文件的新内容 .
...另一方面,只会删除被跟踪的已删除文件 .
所以后者在我看来是更好的选择 .
如果这些是唯一的变化,你可以简单地做
提交所有更改 . 这将包括已删除的文件 .
是仅添加已删除文件的最佳选项 .
这是一些其他选择 .
git add -u
-u --update仅匹配索引中已跟踪的文件而不是工作树 . 这意味着它永远不会暂存新文件,但它会暂存已修改的跟踪文件的新内容,并且如果已删除工作树中的相应文件,它将从索引中删除文件 .
如果没有,则默认为“ . ”;换句话说,更新当前目录及其子目录中的所有跟踪文件 .
这个简单的解决方案适合我:
如果你想将它添加到
.gitconfig
,请执行以下操作:然后你要做的就是运行:
这将删除之前由git跟踪的所有已删除文件,以及处理文件名中包含空格的情况 .
根据您的POSIX变体,您可能需要使用
xargs -0 -r
:这将导致xargs
在管道空内容时正常退出 .编辑:
--cached
和--deleted
标志串联使用,以防止意外删除尚未删除的文件 .试试吧 .
要么
请使用
-t
查看实际运行的命令我只是调整了Virender的答案来做同样的事情:
git-add的所有标志都不会仅删除已删除的文件;如果您修改了所有已删除的文件,那么您没问题,但除此之外,您需要运行git-status并解析输出 .
根据Jeremy的回答,这就是我得到的:
获取文件状态 .
对于已删除的文件,请隔离文件的名称 .
删除所有以#开头的行,以及包含单词"deleted"的状态行;我不再那么久了,所以你可能必须针对不同情况对其进行修改 . 我认为表达式分组可能是GNU特有的功能,所以如果你不使用gnutils,你可能需要添加多个
grep -v
行 .将文件传递给
git rm
.现在将它粘贴在shell别名中......
如上所述
将删除的文件分阶段删除,但也修改了文件以进行更新 .
要取消暂存已修改的文件,您可以执行此操作
如果你想保持你的提交有条不紊和干净 .
NOTE: 这也可能会删除已删除的文件,因此请小心使用这些通配符 .