除去多文件从一个混帐回购协议已删除了磁盘
-
20-08-2019 - |
题
我有一个混帐回购协议,我已删除了四个文件使用 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
- 获得状态的文件。
- 删除的文件,隔离名称的文件。
- 删除所有线路开始#s,以及一个状态行了单词"删除";我不记得它是什么,确切地说,它没有任何更长时间,因此可能必须修改这对于不同的情况。我认为分组的表达可能是一个GNU的具体特征,因此如果你不使用gnutils,可能必须添加多
grep -v
线。 - 通过的文件
git rm
.
坚持这一壳别现在...
如所提到的
git add -u
级去除的文件进行删除,而且修改过的文件进行更新。
要unstage修改过的文件,你可以做
git reset HEAD <path>
如果你想保持你的提交组织和清洁点击 注:的 这也可以unstage被删除的文件,所以小心那些通配符。
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,但混帐处理删除的文件有点尴尬)。