我有,我已经使用删除四个文件一个Git回购rm
( 不 git rm
),和我的Git的状态是这样的:
# deleted: file1.txt
# deleted: file2.txt
# deleted: file3.txt
# deleted: file4.txt
如何删除从混帐这些文件,而无需手动完成,并添加每个文件是这样的:
git rm file1 file2 file3 file4
理想情况下,我正在寻找的东西,在相同的方式工作git add .
的确,如果可能的话。
Answer 1:
对于Git的1.x的
$ git add -u
这告诉git的自动阶段履带文件 - 包括删除先前跟踪的文件。
对于2.0的Git
到舞台的整个工作树:
$ git add -u :/
到舞台只是当前的路径:
$ git add -u .
Answer 2:
git ls-files --deleted -z | xargs -0 git rm
可能是你在找什么..我的作品..
Answer 3:
您可以使用
git add -u
要删除的文件添加到临时区域,然后提交他们
git commit -m "Deleted files manually"
Answer 4:
如果你只需要运行:
git add -u
git会更新其指数知道,你已经删除的文件实际上应该是下一个承诺的一部分。 然后你可以运行“git的承诺”在变革检查。
或者,如果你运行:
git commit -a
它会自动把这些变化(以及任何其他),并提交它们。
更新 :如果你只是想添加删除文件,请尝试:
git ls-files --deleted -z | xargs -0 git rm
git commit
Answer 5:
你可能寻找-A:
git add -A
这是类似与git加-u,而且还增加了新的文件。 这大致汞柱的相当于addremove
命令(尽管移动自动检测)。
Answer 6:
台数只有删除的文件:
for x in $(git status | grep deleted | awk '{print $2}'); do git rm $x; done
或(在xargs的方式):
git status | awk '/deleted/ {print $2}' | xargs git rm
你可以别名首选命令,方便以后使用设置。
Answer 7:
git rm test.txt
之前或之后您删除实际的文件。
Answer 8:
你可能会得到更多的比你想要的“--all”或“--update”选项使用Git补充。 新的和/或修改的文件也将被添加到索引。 我有一个bash别名设置时,我想删除从混帐删除的文件不会触摸其他文件:
alias grma='git ls-files --deleted -z | xargs -0 git rm'
已经从文件系统中删除所有文件都添加到索引中删除。
Answer 9:
不,它真的很重要,但我的选择答案不同意:
git add -u
...将从指数若在工作树中相应的文件已被删除删除文件,但它也将上演的跟踪的文件修改后的新的内容。
git rm $(git ls-files --deleted)
......在另一方面只会RM被跟踪的已删除的文件。
所以,在我看来,后者是更好的选择。
Answer 10:
如果这些是唯一的变化,你可以简单地做
git commit -a
提交所有更改。 这将包括被删除的文件。
Answer 11:
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.
Answer 12:
git的添加-u
-u --update对已经只有比赛中的索引,而不是工作树跟踪文件。 这意味着,它绝不会上演新的文件,但它会阶段性的跟踪的文件修改的新内容,它会从指数若在工作树中相应的文件已被删除删除文件。
如果没有给定,默认为“”; 换言之,更新在当前目录及其子目录下的所有文件跟踪。
Answer 13:
这简单的解决方案对我的作品罚款:
git rm $(git ls-files --deleted)
Answer 14:
如果你想将它添加到你.gitconfig
做到这一点:
[alias]
rma = !git ls-files --deleted -z | xargs -0 git rm
然后,所有你需要做的就是运行:
git rma
Answer 15:
git ls-files --deleted -z | xargs -0 git rm --cached
这将删除全是以前的git通过跟踪所有被删除的文件,以及处理您的文件名有空格的情况。
根据您的POSIX变种,您可能需要使用xargs -0 -r
:这将导致xargs
当管道空内容将正常退出。
编辑: --cached
和--deleted
标志串联使用,以防止意外删除尚未被删除的文件。
Answer 16:
试试吧。
-a
--all
Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected.
git add . && git commit -m -a "Your commit"
要么
git add --all && git commit -m "Your commit"
Answer 17:
请使用-t
,看看哪个命令实际上是跑
我只是调整了Virender回答做相同的:
git ls-files --deleted -z | xargs -t -0 git rm
Answer 18:
标志以混帐附加的无只会舞台上删除的文件; 如果你所有的修改都将被删除的文件,那么你的罚款,但除此之外,你需要运行git-状态和解析输出。
工作过杰里米的答案,这是我得到了什么:
git status | sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
- 获取文件的状态。
- 对于删除的文件,隔离文件的名称。
- 删除所有以#秒启动,以及作为曾在其“已删除”字样的状态行线; 我不记得这是什么,到底,和它的不存在任何更长的时间,所以你可能需要修改这个针对不同的情况。 我觉得分组表达式的可能是一个特定的GNU-功能,所以如果你不使用gnutils,您可能需要添加多个
grep -v
线。 - 文件传递给
git rm
。
在现在一个shell别名坚持这个...
Answer 19:
如上所述
git add -u
阶段删除的文件进行删除,同时也修改过的文件进行更新。
为了unstage修改过的文件,你可以做
git reset HEAD <path>
如果你想保持你的提交组织和清洁。
注意:这也可能unstage被删除的文件,所以小心那些通配符。
Answer 20:
下面的工作,即使你有很多要处理的文件中:
git ls-files --deleted | xargs git rm
你可能也想与评论提交。
有关详细信息,请参阅: 有用的Git脚本
Answer 21:
git commit -m 'commit msg' $(git ls-files --deleted)
这为我工作后,我已删除的文件。
Answer 22:
我需要相同的,使用混帐贵“阶段变化”按钮。 它也增加了一切。
而经过“阶段变化”我做了“承诺” ...
所以我的工作目录是再次清洁。
Answer 23:
您可以使用git add -u <filenames>
仅舞台删除的文件。
例如,如果你删除的文件templates/*.tpl
,然后用git add -u templates/*.tpl
。
该-u
需要以指存在于存储库,但在工作目录不再存在的文件。 否则,默认的git add
是为了寻找在工作目录中的文件,如果你指定你删除的文件存在,它不会找到它们。
Answer 24:
就像是
git status | sed -s "s/^.*deleted: //" | xargs git rm
可以做到这一点。
Answer 25:
添加系统别名分期已删除的文件命令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
安装。
Answer 26:
(另一种变型)
我想删除所有已经从磁盘文件,而是从一个特定的文件夹中删除,留下其他文件夹不变。 以下为我工作:
git ls-files --deleted | grep <folder-name> | xargs git rm
Answer 27:
git rm $(git ls-files -d)
删除被列出的所有文件git ls-files
命令(-d只显示已删除的文件)。 的文件与文件名或路径的空间是不行的,但简单的记
Answer 28:
对于Visual Studio项目
'git ls-files --deleted | sed 's/(.*)/"\1"/'| xargs git rm'
当被删除的文件路径有空间,这是有用的
Answer 29:
最灵活的解决方案,我发现到目前为止是
git cola
并选择所有被删除的文件我想的阶段。
(注意:我通常做的一切命令行中的git,但混帐处理删除的文件有点尴尬)。
文章来源: Removing multiple files from a Git repo that have already been deleted from disk