Delete files from git index when they are already deleted from fs
我从fs中删除了许多文件,并在git status中列出为已删除。
对于每个文件,我如何才能更快地分段这些更改,然后运行git rm?
- 你问的问题和这个问题差不多。
- 基本上也是stackoverflow.com/questions/3169787/…的副本。
您可以使用以下方法进行此操作:
1
| git ls-files --deleted -z | xargs -0 git rm |
号
每当有人问这个问题时,人们都会建议使用git add -u,但这个答案的问题是,它也会在您的工作副本中进行其他修改,而不仅仅是删除。在许多情况下,这可能是可以的,但是如果您只想阶段性地删除工作副本中删除的文件,那么我提出的建议就更精确了。
实际上,git rm文档中有一个部分讨论了如何做您想要的事情——我认为"其他方式"部分中建议的命令与我在这里建议的命令是等效的。
- + 1。只是出于兴趣,为什么-z/-0?看来git ls-files --deleted | xargs git rm也能用吗?
- @SimonWhitaker:这使得命令可以工作,即使文件名中有空格或换行符,方法是输出用nul字节而不是换行符分隔的列出的文件。
- 啊,明白了-谢谢
- 谢谢!这是一个很好的别名:"rd="!git ls文件--已删除-z xargs-0 git rm"'(将其放入.gitconfig中,不带外部单引号,位于[别名]下)。然后下次运行"git rd")。
- 除非安装了带有xargs的cygwin,否则这在Windows上不起作用。
- 在Windows w/out cygwin上,可以使用PowerShell,如:git rm $(git ls-files --deleted )。(注意:这实际上也适用于bash,假设有一个合理大小的变更集)。
使用-u标志:man git add
您可以使用git rm --cached"path/to/file"来暂存单个已删除的文件。
使用git rm -r --cached --"path/to/directory"建立一个完整的已删除目录。
Git添加-A
会帮你做的
git commit -a将处理删除的文件(以及修改的文件),并提示您提交消息。我通常执行EDOCX1(verbose)来查看修改文件的不同之处。
从手册页面:
by using the -a switch with the commit
command to automatically"add" changes
from all known files (i.e. all files
that are already listed in the index)
and to automatically"rm" files in the
index that have been removed from the
working tree, and then perform the
actual commit;
号