假设我的git储存库中有一个名为的文件foo
。
假设已使用rm
(不是git rm
)将其删除。然后git status将显示:
Changes not staged for commit:
deleted: foo
如何分阶段删除单个文件?
如果我尝试:
git add foo
它说:
'foo' did not match any files.
假设我的git储存库中有一个名为的文件foo
。
假设已使用rm
(不是git rm
)将其删除。然后git status将显示:
Changes not staged for commit:
deleted: foo
如何分阶段删除单个文件?
如果我尝试:
git add foo
它说:
'foo' did not match any files.
Answers:
从Git 2.0.0开始,git add
还将逐步删除文件。
<pathspec>…
从中添加内容的文件。可以指定Fileglob(例如* .c)来添加所有>匹配文件。也可以给出一个领先的目录名(例如,用于添加dir / file1和dir / file2的dir)以更新索引以匹配整个目录的当前状态(例如,指定dir将不仅仅记录已修改的文件dir / file1在工作树中,将文件dir / file2添加到工作树中,并且还将文件dir / file3添加到工作树中,请注意,较早版本的Git曾经忽略已删除的文件;如果您使用--no-all选项,想要添加修改的文件或新文件,但忽略已删除的文件。
使用git rm foo
阶段性删除该文件。(如果以前没有将其删除,那么这也会从文件系统中删除该文件。由于先前已将其检入,因此当然可以从git中还原它。)
要暂存要删除的文件而不将其从文件系统中删除,请使用 git rm --cached foo
--cache
标志以仅从存储库中删除文件,而在文件系统中保持不变。
git status | grep 'deleted:' | cut -d':' -f2 | xargs -t -I {} git add -u "{}"
。其他答案似乎正在显示如何正确地暂存文件(而不是如何暂存已删除的文件)。ps。在xargs
基于命令为我工作在Ubuntu 12.04,但是当我做手工git add -u deleted_file.txt
它好好尝试的工作。我的git是1.7.9.5
git rm
即使已经从文件系统中删除了文件,也会很高兴地将其删除。正如OP对另一个答案的评论所指出的那样,他们希望暂存一个已删除的特定文件。
git rm
不会暂存已删除的文件。它将引发此错误:fatal: pathspec '~.SLDASM' did not match any files
。以下是带有证明的屏幕:i.imgur.com/cKNKGGe.png i.imgur.com/1p9JdWF.png。第一个屏幕截图清楚地显示了2个文件已被删除而不是暂存,第二个屏幕截图显示了当我键入时git rm "~$Box.SLDASM"
,它引发了此错误。
即使使用是正确的git rm [FILE]
,也可以这样做git add -u
。
根据git-add
文档:
-u-更新
在索引已具有与[FILE]匹配的条目的地方更新索引。这会删除和修改索引条目以匹配工作树,但不会添加任何新文件。
如果在使用-u选项时未提供[FILE],则将更新整个工作树中的所有跟踪文件(旧版本的Git用于将更新限制为当前目录及其子目录)。
索引将在此刷新,文件将被适当地暂存。
git add -A .
将添加所有更改,我特别想暂存一个已删除的文件。
git add -u FolderWithDeletedFiles/
,它做了我想要的,谢谢
要暂存所有手动删除的文件,可以使用:
git rm $(git ls-files --deleted)
要将别名添加为git rm-deleted
,请运行:
git config --global alias.rm-deleted '!git rm $(git ls-files --deleted)'
unknown option `deleted)
for /F %I in ('git ls-files --deleted') do git add -u %I
添加所有准备好的已删除文件
git status -s | grep -E '^ D' | cut -d ' ' -f3 | xargs git add --all
感谢检查以确保
git status
你应该很好去
rm <file>
,而是git rm <file>
git version 2.15.2 (Apple Git-101.1)
。
您可以使用此命令
git add `git ls-files --deleted`