![](/img/trans.png)
[英]git removing files that are not in .gitignore with git rm command
[英]Files listed in .gitignore are removed with git rm command
我已经设置了一个.gitignore
文件,其中只有一个文件:
cat .gitignore
README.md
.gitignore
文件具有以下权限:
ls -l README.md
-rw-r--r-- 1 tdun0002 1049089 113 Mar 21 18:54 README.md
我不确定问题是什么,但是当我执行git rm --force *
所有内容都被删除,包括.gitignore
文件中列出的README.md
文件。
我究竟做错了什么?
.gitignore
文件是一种指定哪些未跟踪文件将保持未跟踪状态的方法,即使您尝试添加它们(并且在尝试使用这些更改的操作之前,应该完全提交对其的任何更改通常是一个好主意)。 这不是告诉一般git
命令不要对文件做任何事情的方法。
特别是,如果在将文件添加到.gitignore
时文件已经在 repo 中,则不会对其产生任何影响。
由于您的README.md
在您将其添加到.gitignore
时已经在存储库中,因此它仍然是一个跟踪文件。
虽然这可能无法解决您的实际问题:我很难弄清楚您的意图是什么,因为这似乎是一个 XY 问题-您在问为什么您尝试的方法不起作用,而我们却没有”实际上不知道您要做什么。 下面讨论了想到的两种可能性:
如果您的意图是在 repo 中没有README.md
,只需git rm
它,然后提交/推送/等。
如果您确实希望在 repo 中使用它,则不应将其列在.gitignore
文件中。
如果您想删除除少数文件之外的所有内容(并且它们是干净的,因为没有未提交的更改),您可能会发现删除这些文件更容易,然后只需查看您想要保留的文件即可。 类似git rm . ; git checkout HEAD -- README.md
东西git rm . ; git checkout HEAD -- README.md
git rm . ; git checkout HEAD -- README.md
git rm . ; git checkout HEAD -- README.md
。
如果您只想删除特定文件,您可以使用通配符来限制它们。 例如, git rm --dry-run [0-9a-zA-QS-Z]*
不会触及任何以R
开头的文件。 你会注意到我在这里使用了--dry-run
因为你可能想在允许它实际删除之前检查这个选项。 一旦您感到满意,它就会做正确的事情,只需在没有该选项的情况下再次运行它。
如果这是您想要实现的其他目标,如果您可以扩展它会很方便。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.