繁体   English   中英

使用 git rm 命令删除 .gitignore 中列出的文件

[英]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 问题-您在问为什么您尝试的方法不起作用,而我们却没有”实际上不知道您要做什么。 下面讨论了想到的两种可能性:

  1. 如果您的意图是在 repo 中没有README.md ,只需git rm它,然后提交/推送/等。

  2. 如果您确实希望在 repo 中使用它,则不应将列在.gitignore文件中。

  3. 如果您想删除除少数文件之外的所有内容(并且它们是干净的,因为没有未提交的更改),您可能会发现删除这些文件更容易,然后只需查看您想要保留的文件即可。 类似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

  4. 如果您只想删除特定文件,您可以使用通配符来限制它们。 例如, git rm --dry-run [0-9a-zA-QS-Z]*不会触及任何以R开头的文件。 你会注意到我在这里使用了--dry-run因为你可能想在允许它实际删除之前检查这个选项。 一旦您感到满意,它就会做正确的事情,只需在没有该选项的情况下再次运行它。

如果这是您想要实现的其他目标,如果您可以扩展它会很方便。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM