Git - .gitignore怎么忽略已经被版本控制的文件

问题

如果某个文件已经存在于远程仓库了,也就是说某个文件已经被版本控制了,如果将该文件添加到.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 ?会报错,不能执行操作。

参考链接

原文地址:https://www.cnblogs.com/yulinlewis/p/10236563.html

时间: 2024-08-27 11:48:28

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

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

在Studio里使用Git管理代码的过程中,可以修改.gitignore文件中的标示的方法来忽略开发者想忽略掉的文件或目录,如果没有.gitignore文件,可以自己手工创建.在.gitignore文件中的每一行保存一个匹配的规则例如: 1 2 3 4 5 6 7 # 此为注释 – 将被 Git 忽略 *.a       # 忽略所有 .a 结尾的文件 !lib.a    # 但 lib.a 除外 /TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO b

Git .gitignore文件的使用

本文转载自 http://blog.csdn.net/xmyzlz/article/details/8592302 在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改 .gitignore 文件的方法.这个文件每一行保存了一个匹配的规则例如: # 此为注释 – 将被 Git 忽略 *.a       # 忽略所有 .a 结尾的文件            !lib.a    # 但 lib.a 除外            /TODO     # 仅仅忽略项目根目录下的 TOD

git提交时忽略指定文件

git提交时忽略指定文件 我们在项目开发过程中经常用到git来管理自己的项目,使用git版本控制进行多人协作开发具有许多优势,这里就不一一阐述了,有兴趣的同学可以自己去查找资料进行系统的学习.而本篇文章要说的是git使用过程中会遇到的一个问题,就是我们在项目开发过程中经常会修改一些配置文件 ,但是有的时候这些配置文件不需要被提交到远程仓库中,只在本地生效即可,此时就需要我们每次提交代码时把该文件给手动忽略,那么可不可以把该文件设置成永久忽略呢?答案肯定是有的,git的gitignore文件中可以

git .gitignore不生效

原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的. 解决方法: 1.先把规则写好,然后把规则对应的文件删了,然后再提交,然后再把删的文件放回来,这样本地就不会再提交这个文件,然后服务上被忽略的文件还需要手动再上传一次. 2.就是先把本地缓存删除(改变成未track状态),然后再提交(文件忽略了,在你本机不会再上传,同时服务器上相关的文件也会被删除,需要你用其他方法再上传一次,然后服务器上就也忽略了): git

git .gitignore文件

在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如果没有这个文件,则需自己手工建立此文件). 一.创建 .gitignore 文件 1.在需要创建 .gitignore 文件的文件夹, 右键选择Git Bash 进入命令行,进入项目所在目录. 2.输入 touch .gitignore ,生成".gitignore"文件. 3.在".gitignore" 文件里输入你要忽略的文件夹及其文件就可以了.

Git忽略不需要同步的文件

新建.gitignore文件 文件内容写要忽略的文件或路径 Git忽略不需要同步的文件

git ignore 添加忽略文件不生效解决办法

在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件).这个文件每一行保存了一个匹配的规则例如: /target/ /target/* .gitignore .classpath .settings* 配置语法: 以斜杠“/”开头表示目录: 以星号“*”通配多个字符: 以问号“?”通配单个字符 以方括号“[]”包含单个字符的匹配列表: 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录: git rm -r

Git .gitignore 设置为全局global

在操作Git时,我们会将修改的内容$git add . 到Git,Git会提示我们哪些文件都修改了.此时提示中会包括系统自动修改的文件,bin文件等.而我们add到Git时,并不希望将这些文件也一同add到Git,但如果不add到Git,Git就会一直提示我们文件被修改了,都需要add. 此时我们需要忽略这些系统自动修改的东西,如果有一些你不想提交到Git的东西,你也可以忽略. Git为我们提供了.gitignore文件,此文件专门来做忽略,只要在此文件中设置你想忽略的内容就可以了. 不需要从头

转:git设置过滤忽略的文件或文件夹

from: https://www.cnblogs.com/foohack/p/4629255.html git设置过滤忽略的文件或文件夹 我们一般向代码仓库提交项目的时候,一般需要忽略编译生成的中间文件以及文件夹的提交,因为它们是无用的,而且也会占用仓库的空间.一般只用提交.pro,.sln,makefile,程序源文件等编译必须用到的文件,所以是有这样的需求的. 怎么用呢?一般是在自己的本地项目底下建立一个.gitignore的文本文件,在命令行下用touch建立就可以了,然后编辑它,向里面