从已从磁盘中删除的Git存储库中删除多个文件

旧巷老猫 提交于 2019-12-09 20:21:07

我有一个Git repo,我已经删除了使用rm而不是 git rm )的四个文件,我的Git状态如下所示:

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

如何从Git中删除这些文件,而无需手动浏览并添加如下所示的每个文件:

git rm file1 file2 file3 file4

理想情况下,我正在寻找与git add .相同的方式git add . 如果那是可能的话。


#1楼

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

git add -u 

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

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

...另一方面,只会删除被跟踪的已删除文件。

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


#2楼

如果要将其添加到.gitconfig请执行以下操作:

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

然后你要做的就是运行:

git rma

#3楼

git-add的所有标志都不会仅删除已删除的文件; 如果您修改了所有已删除的文件,那么您没问题,但除此之外,您需要运行git-status并解析输出。

根据Jeremy的回答,这就是我得到的:

git status |  sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
  1. 获取文件的状态。
  2. 对于已删除的文件,请隔离该文件的名称。
  3. 删除所有以#开头的行,以及其中包含“已删除”字样的状态行; 我不记得它是什么,确切地说,它不再存在,所以你可能不得不为不同的情况修改它。 我认为表达式分组可能是GNU特有的功能,所以如果你不使用gnutils,你可能需要添加多个grep -v行。
  4. 将文件传递给git rm

现在将它粘贴在shell别名中......


#4楼

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.

#5楼

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

git cola

并选择我想要暂存的所有已删除文件。

(注意我通常在git中执行所有命令行,但是git处理删除的文件有点尴尬)。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!