-->

从已经从磁盘中删除一个Git回购删除多个文件(Removing multiple files fro

2019-07-17 13:50发布

我有,我已经使用删除四个文件一个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
  1. 获取文件的状态。
  2. 对于删除的文件,隔离文件的名称。
  3. 删除所有以#秒启动,以及作为曾在其“已删除”字样的状态行线; 我不记得这是什么,到底,和它的不存在任何更长的时间,所以你可能需要修改这个针对不同的情况。 我觉得分组表达式的可能是一个特定的GNU-功能,所以如果你不使用gnutils,您可能需要添加多个grep -v线。
  4. 文件传递给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