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

使用git rm命令删除.gitinore中列出的文件,git,Git,我设置了一个.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*时,所有内容都被删除,包括README.md文件中列出的.gitignore文件 我做错了什么?使用.gitignore文件可以指定哪些未

我设置了一个
.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*
时,所有内容都被删除,包括
README.md
文件中列出的
.gitignore
文件


我做错了什么?

使用
.gitignore
文件可以指定哪些未跟踪的文件将保持未跟踪状态,即使您尝试添加它们(通常最好在尝试使用这些更改的操作之前完全提交对其的任何更改)。这不是告诉常规
git
命令不要处理文件的方法

特别是,当您将文件添加到
.gitignore
时,如果文件已经在repo中,则这对它没有影响

由于将您的
README.md
添加到
.gitignore
时已在repo中,因此它仍然是一个跟踪文件


虽然这可能无法解决您的实际问题:我很难弄清楚您的意图是什么,因为这似乎是一个XY问题-您在问为什么您尝试的东西不起作用,而我们实际上不知道您试图做什么。下面讨论了脑海中出现的两种可能性:

  • 如果您的意图是在回购协议中不包含
    README.md
    ,只需
    git rm
    它,然后提交/推送/etc

  • 如果您确实希望它出现在回购协议中,则不应将其列在
    .gitignore
    文件中

  • 如果您想删除除少数文件之外的所有文件(并且它们是干净的,在没有未提交的更改的意义上),您可能会发现删除这些文件更容易,然后只需检查您想要保留的文件即可。类似于
    git-rm;git签出头--README.md

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


  • 如果这是您试图实现的另一个目标,那么如果您可以扩展它,它将非常方便。

    您的
    .gitignore
    是否与
    README.md
    位于同一位置?在添加到
    .gitignore
    之前是否跟踪了该文件?
    .gitignore
    文件与
    README.md
    文件位于同一目录中。但是我没有将
    .gitignore
    文件提交到repo。它是未追踪的。我是否需要将其提交回购协议才能使其生效?在我添加
    .gitignore
    文件之前,已跟踪
    README.md
    文件。是否假设未跟踪的被忽略文件将被
    git rm
    忽略?这个假设从何而来?好的,我想删除该目录中除了
    README.md
    文件之外的所有文件,以便清理它并用不同的文件集和不同的目录结构替换该git目录。当我发出
    git rm*
    命令时,我希望它能保持
    README.md
    文件中列出的
    .gitignore
    文件完好无损。我想要回购协议中的
    README.md
    。有没有办法在git命令行上排除该文件?@bluethundr根据前面的评论,添加了几个可能对您有所帮助的选项。