我有一个Git repo,我已经删除了使用rm
( 而不是 git rm
)的四个文件,我的Git状态如下所示:
# deleted: file1.txt
# deleted: file2.txt
# deleted: file3.txt
# deleted: file4.txt
如何从Git中删除这些文件,而无需手动浏览并添加如下所示的每个文件:
git rm file1 file2 file3 file4
理想情况下,我正在寻找与git add .
相同的方式git add .
如果那是可能的话。
#1楼
并不是真的很重要,但我不同意所选择的答案:
git add -u
...如果已删除工作树中的相应文件,将从索引中删除文件,但它也会暂存已修改的跟踪文件的新内容。
git rm $(git ls-files --deleted)
...另一方面,只会删除被跟踪的已删除文件。
所以后者在我看来是更好的选择。
#2楼
如果要将其添加到.gitconfig
请执行以下操作:
[alias]
rma = !git ls-files --deleted -z | xargs -0 git rm
然后你要做的就是运行:
git rma
#3楼
git-add的所有标志都不会仅删除已删除的文件; 如果您修改了所有已删除的文件,那么您没问题,但除此之外,您需要运行git-status并解析输出。
根据Jeremy的回答,这就是我得到的:
git status | sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
- 获取文件的状态。
- 对于已删除的文件,请隔离该文件的名称。
- 删除所有以#开头的行,以及其中包含“已删除”字样的状态行; 我不记得它是什么,确切地说,它不再存在,所以你可能不得不为不同的情况修改它。 我认为表达式分组可能是GNU特有的功能,所以如果你不使用gnutils,你可能需要添加多个
grep -v
行。 - 将文件传递给
git rm
。
现在将它粘贴在shell别名中......
#4楼
git ls-files --deleted | xargs git rm
是仅添加已删除文件的最佳选项。
这是一些其他选择。
git add . => Add all (tracked and modified)/new files in the working tree.
git add -u => Add all modified/removed files which are tracked.
git add -A => Add all (tracked and modified)/(tracked and removed)/new files in the working tree.
git commit -a -m "commit message" - Add and commit modified/removed files which are tracked.
#5楼
我迄今发现的最灵活的解决方案是
git cola
并选择我想要暂存的所有已删除文件。
(注意我通常在git中执行所有命令行,但是git处理删除的文件有点尴尬)。
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3139367