问题

如果某个文件已经存在于远程仓库了,也就是说某个文件已经被版本控制了,如果将该文件添加到.gitignore中,是无法生效的。因为.gitignore是用来控制尚未被纳入版本控制的文件,如果文件已经存在于远程库中,自然也就无法生效了。

于是就此衍生了一个问题:.gitignore怎么忽略已经被版本控制的文件?

解决方法

方法一

直接在远程库里将想要忽略的文件删除掉,再将该文件写入.gitignore中即可。

这种做法的前提是,你确定该文件是允许从远程库删除掉的,然而有些时候,这种做法是不可能的。要么没权限去远程库删掉该文件,要么该文件是必须的。

方法二

使用命令git rm --cached filename,然后将该文件写入.gitignore中即可。

该命令表示从git仓库中将文件移除,不再进行版本控制,但保留工作区的该文件。

需要注意的是,该命令其实和方法一差不多。git rm表示移除某个文件,--cached表示从暂存区中移除,如果不加该参数就是直接从工作区移除了。

工作区就是指的Working Tree,暂存区就是指的Stage。工作区就是我们的磁盘,被版本控制的文件都存放于工作区。如果改动了某个文件,首先要将该文件添加到暂存区(Stage),然后再提交(commit)到本地仓库,最后才推送(push)到远程库。

git rm --cached filename并不会从物理上删除文件,只是从暂存区中将文件删除。由于该文件原本已经被版本控制了,使用了该命令后,虽然保留了工作区的该文件,但是却会在暂存区中生成一个删除了该文件的记录,如果此时进行commit,就会把版本库里的该文件给删掉了,如果push到远程库,也会被删掉。最终还是走的方法一的路子。

关于git rm --cached filename的补充

看到有篇文章举例很详细,如下:

  • 新建文件1.txt,未被跟踪(Untracked files),提交到暂存区(Changed to be committed),未提交到版本库。 使用git rm —cached 1.txt

    • 把文件恢复到未被跟踪的状态,即删除暂存区中的1.txt;
  • 文件1.txt,已经提交到版本库,工作区,暂存区都是干净的。使用git rm —cached 1.txt
    • 把工作区的文件1.txt置为了”未跟踪”状态,即Untracked files
    • 暂存区生成一个deleted 1.txt的记录,如果提交了,就是把版本库中的1.txt删除。
    • 不影响工作区中的文件。
  • 文件1.txt, 已经提交到版本库,修改1.txt,并且提交到了暂存区。使用git rm —cached 1.txt
    • 把工作区的文件1.txt置为了”未跟踪”状态,即Untracked files。

    • 暂存区生成一个deleted 1.txt的记录,如果提交了,就是把版本库中的1.txt删除。

    • 不影响工作区中的文件。还是修改后的1.txt
  • 文件1.txt, 已经提交到版本库,修改1.txt,提交到暂存区,继续修改1.txt。使用git rm —cached 1.txt 
会报错,不能执行操作。

参考链接

Git - .gitignore怎么忽略已经被版本控制的文件的更多相关文章

  1. Git忽略已经被版本控制的文件(添加.gitignore不会起作用)

    说明:已经被维护起来的文件(需要被远程仓库控制),即使加入.gitignore也会无济于事. .gitignore只对那些只存在在本地,而不在远程仓库的文件起作用.(untraked file). 操 ...

  2. 如何在IntelliJ IDEA中使用Git .ignore插件忽略不必要提交的文件

    参考  https://blog.csdn.net/qq_34590097/article/details/56284935 最近初学Git,而且在使用的IDE是IntelliJ IDEA,发现IDE ...

  3. GIT无法自动忽略YellowRV1.1.uvgui.Administrator文件的解决方法

    原来这个YellowRV1.1.uvgui.Administrator文件是在.gitignore之前被提交进服务器的,.gitignore对已经存在服务器里的文件是不起作用的.按照回答里投票最高的答 ...

  4. git如何忽略已经加入版本控制的文件

    git移除已经追踪的文件 有时候新增一个文件,会自动追加到git的版本控制当中,但是又不想提交到仓库.可以按照下面的步骤: git status 查看管理状态: ml-py git:(master) ...

  5. git忽略已添加版本控制的文件

    今天使用git做maven项目的版本控制,刚开始搭建项目后,把所有文件全部提交了. 已经提交的文件,gitignore中后配置也无效了. 所以使用以下命令来操作,操作后要提交哦. 1.执行 git r ...

  6. vue+node+mongoDB 火车票H5(三)---git提交时忽略不想提交的文件

    想要把项目通过git提交到GitHub上,但提交时并不想提交node_modules文件夹,这个文件夹太大 git 提交代码时不提交配置文件夹node_modules 在.gitignore文件中添加 ...

  7. Git学习之忽略特殊文件.gitignore的配置

    1.Mac中使用Git上传项目代码时忽略.DS_Store文件 简单的说Mac每个目录都会有个文件叫.DS_Store,它是用于存储当前文件夹的一些Meta信息.所以每次查看Git目录的状态,如果没有 ...

  8. Git中.gitignore文件不起作用的解决以及Git中的忽略规则介绍

    在Studio里使用Git管理代码的过程中,可以修改.gitignore文件中的标示的方法来忽略开发者想忽略掉的文件或目录,如果没有.gitignore文件,可以自己手工创建.在.gitignore文 ...

  9. git .gitignore忽略规则不生效解决办法

    忽略规则不生效, 原因是.gitignore只能忽略那些原来没有被track的文件, 如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的. 那么解决方法就是先把本地缓存删除(改变成 ...

随机推荐

  1. 一起来学linux:FTP服务器搭建

    首先安装vsftpd: apt install vsftpd有下面几个重要的配置文件:1 /etc/vsftpd.conf. 这个是vsftpd的配置文件.通过“参数=设置值”的方式来设置的. 2 / ...

  2. 解析json的方式

    一.Javascrip操作json 原始方式: var str1 = '{ "name": "jacun", "addr": "b ...

  3. 怎样把word直接转换成ppt

  4. ubuntu12.04不能记住上次编辑位置的解决方案

    1:按照网上的代码 au BufReadPost * |if line("'\"") <= line("$")|exe("norm ' ...

  5. IOC入门1

    1.配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:/ ...

  6. linux应用之mysql数据库的安装及配置(centos)

    CentOS下Mysql数据库的安装与配置   如果要在Linux上做j2ee开发,首先得搭建好j2ee的开发环境,包括了jdk.tomcat.eclipse的安装(这个在之前的一篇随笔中已经有详细讲 ...

  7. 【整理】XOR:从陌生到头晕

    一:解决XOR常用的方法: 在vjudge上面输入关键词xor,然后按照顺序刷了一些题. 然后大概悟出了一些的的套路: 常用的有贪心,主要是利用二进制的一些性质,即贪心最大值的尽量高位取1. 然后有前 ...

  8. python装饰器精髓代码

    #!/usr/bin/env python #-*- coding:utf-8 -*- import time def foo(func): def inner(): print('fs...') f ...

  9. https证书自签

         https               http over ssl = https 443/tcp                 ssl: v3                 tls: ...

  10. poj3070 求斐波那契数列第n项 ——矩阵快速幂

    题目:http://poj.org/problem?id=3070 用矩阵快速幂加速递推. 代码如下: #include<iostream> #include<cstdio> ...