我有一个混帐回购协议,我已删除了四个文件使用 rm ( git rm),和我的混状况看起来是这样的:

#    deleted:    file1.txt
#    deleted:    file2.txt
#    deleted:    file3.txt
#    deleted:    file4.txt

我怎么删除这些文件svn而不必手动通过和加每个文件是这样的:

git rm file1 file2 file3 file4

理想的是,我在寻找的东西,以同样的方式工作, git add . 的确,如果这是可能的。

有帮助吗?

解决方案

对于GIT中的1.x

$ git add -u

这告诉GIT中自动追踪阶段文件 - 包括删除先前跟踪文件。

对于GIT中2.0

要上演你的整个工作树:

$ git add -u :/

要阶段仅仅是当前路径:

$ git add -u .

其他提示

git ls-files --deleted -z | xargs -0 git rm 

可能是你在找什么..我的作品..

可以使用

git add -u

要被删除的文件添加到分级区域,那么提交它们

git commit -m "Deleted files manually"

如果你只需要运行:

git add -u

git会更新其指数知道,你已经删除的文件实际上应该是下一个承诺的一部分。然后你可以运行“git的承诺”在变革检查。

或者,如果你运行:

git commit -a

,它会自动采取这些变化(和任何其他人)和提交它们。

更新的:如果你只是想添加删除文件,请尝试:

git ls-files --deleted -z | xargs -0 git rm
git commit

您可能正在寻找-A:

git add -A

这是类似与git加-u,而且还增加了新的文件。这大致汞柱的addremove命令的等效(虽然移动自动检测)。

要阶段的仅被删除的文件:

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

您可以别名与优选的命令,方便以后使用设置

git rm test.txt

之前或之后删除实际的文件。

通过使用与你可能会得到更多的比你想要的“--all”或“--update”选项混帐补充。新的和/或修改的文件也将被添加到索引。我有一个bash别名设置为当我想删除从GIT中删除的文件而不接触其它文件:

alias grma='git ls-files --deleted -z | xargs -0 git rm'

这已经从文件系统中除去所有的文件被添加到作为删除的索引。

不,它真的很重要,但我的选择答案不同意:

git add -u 

...如果在工作树中相应的文件已被删除就会从索引中删除的文件,但它也将上演跟踪文件的修改后的新的内容。

git rm $(git ls-files --deleted)

...在另一方面将只RM被跟踪的是,删除的文件。

所以,在我看来,后者是更好的选择。

如果只有这些变化,你可以简单地做

git commit -a

提交的所有更改。这将包括删除的文件。

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.

GIT中添加-u

-u --update 只有对已经匹配的索引,而不是工作树跟踪文件。这意味着,它永远不会阶段新的文件,但它会阶段性的跟踪的文件修改的新内容,并且它将从索引如果在工作树中相应的文件已被删除删除文件。

如果没有给出,默认为“”;换句话说,更新当前目录中的所有文件被跟踪和子目录。

这是简单的解决办法正常工作对我来说:

git rm $(git ls-files --deleted)

如果你想将其添加到您的.gitconfig做到这一点:

[alias]
  rma = !git ls-files --deleted -z | xargs -0 git rm

然后,所有你需要做的就是运行:

git rma
git ls-files --deleted -z | xargs -0 git rm --cached

这将删除全是以前的git通过跟踪所有被删除的文件,以及处理您的文件名有空格的情况。

根据您的POSIX变种,您可能需要使用xargs -0 -r:当管道空的内容,这将导致xargs正常退出

编辑:--cached--deleted标志串联使用,以防止意外删除尚未被删除的文件

尝试。

-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"

请使用-t以查看哪个命令实际上是为跑

我只是调整了Virender答案做相同的:

git ls-files --deleted -z | xargs -t -0 git rm

没有任何标志,混帐加将只阶段,删除文件;如果你所有修改都已删除的文件,然后你没事,但否则,你需要运行混帐状况以及分析产出。

工作的杰里米的答案,这是我得到了什么:

git status |  sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
  1. 获得状态的文件。
  2. 删除的文件,隔离名称的文件。
  3. 删除所有线路开始#s,以及一个状态行了单词"删除";我不记得它是什么,确切地说,它没有任何更长时间,因此可能必须修改这对于不同的情况。我认为分组的表达可能是一个GNU的具体特征,因此如果你不使用gnutils,可能必须添加多 grep -v 线。
  4. 通过的文件 git rm.

坚持这一壳别现在...

如所提到的

git add -u

级去除的文件进行删除,而且修改过的文件进行更新。

要unstage修改过的文件,你可以做

git reset HEAD <path>

如果你想保持你的提交组织和清洁点击 注: 这也可以unstage被删除的文件,所以小心那些通配符。

在下面的工作,即使你有大量的文件来处理:

git ls-files --deleted | xargs git rm

您可能会也想用注释提交。

有关详情,请参见:有用的GIT中的脚本

git commit -m 'commit msg' $(git ls-files --deleted)

这为我工作后,我已删除的文件。

我所需要的相同的 和使用的git GUI“阶段改变”按钮。 它也增加了所有

和后 “的阶段改变” 我做 “提交” ...

所以我的工作目录是再次清洁。

可以使用git add -u <filenames>仅阶段删除的文件。

例如,如果删除的文件templates/*.tpl,然后使用git add -u templates/*.tpl

-u需要以指存在于库中,但在工作目录不再存在的文件。否则,git add默认是看在工作目录中的文件,如果你指定你删除的文件存在,也不会找到他们。

git status | sed -s "s/^.*deleted: //" | xargs git rm 

可以做到这一点。

添加系统别名分期删除的文件作为命令rm-all

UNIX alias rm-all='git rm $(git ls-files --deleted)'

WINDOWS doskey rm-all=bash -c "git rm $(git ls-files --deleted)"

注意

视窗需要安装bash

(另一种变型)

我想删除所有已经从磁盘文件,而是从一个特定的文件夹中删除,留下其他文件夹不变。以下为我工作:

git ls-files --deleted  | grep <folder-name> | xargs git rm
git rm $(git ls-files -d)

删除由git ls-files命令(-d仅示出已删除的文件)中列出的所有文件。的文件与文件名或路径的空间是不行的,但简单的记

有关Visual Studio项目

'git ls-files --deleted | sed 's/(.*)/"\1"/'| xargs git rm' 

当被删除的文件路径具有空间,这是有用

最灵活的解决方案,我发现迄今是

git cola

和选择全部删除的文件我想的阶段。

(注意:我通常做的一切命令行中的git,但混帐处理删除的文件有点尴尬)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top