git如何忽略已经提交的文件 (.gitignore文件无效)

push of current branch was rejected remote changes need to be merged before pushing [](https://pdf-lib.org/Home/Details/6274

)

一. 问题
在初始化git仓库的时候没有创建`.gitignore`文件来过滤不必要提交的文件, 后来却发现某些文件不需要提交, 但是这些文件已经被提交了, 这时候创建`.gitignore`文件忽略这些文件时, 发现ignore的规则对那些已经被track的文件无效.

其实`.gitignore`文件只会忽略那些没有被跟踪的文件, 也就是说ignore规则只对那些在规则建立之后被新创建的新文件生效. 因此推荐: ***初始化git项目时就创建`.gitignore`文件***.

***那么如何使`.gitignore`文件的规则对于那些已经被track的文件生效呢 ?***

二. 解决方法
网上有人说使用`git update-index --assume-unchanged /path/to/file` 这个命令来将已经track的文件标记一下, 使其不出现在更新列表中(`git status`不会列出标记过的文件), 其实这是治标不治本的做法. 这样做, 只在你的项目中生效. 如果是一个团队, 其他开发人员也需要这么做. 而且这个命令只对文件有效. 如果有很多需要忽略的文件呢?? 用正则表达式! 是的, 这样`git update-index --assume-unchanged /path/to/*` . 可是这样只对某个目录下的所有文件有效, 如果要迭代某个目录下的所有文件和子目录下的所有文件呢? 这个我暂时还不知道怎么弄, 知道的朋友可以告诉我 (♥◠‿◠)ノ. 总之, 用这个命令来解决问题非常麻烦 !! 你可以参考一下关于此命令的相关讨论 ==> [点这里](https://link.jianshu.com?t=https://segmentfault.com/q/1010000000430426)
这个讨论里面也给出了真正的解决方法, 那就是:

1.  删除track的文件 (**已经commit的文件**)

*   `git rm 要忽略的文件`
*   `git commit -a -m "删除不需要的文件"`

2.  在`.gitignore`文件中添加忽略规则

*   (1) 在`.gitignore`文件中添加ignore条目, 如: `some/path/some-file.ext`
*   (2) 提交`.gitignore`文件: `git commit -a -m "添加ignore规则"`

3.  推送到远程仓库是ignore规则对于其他开发者也能生效: `git push [remote]`

**tips: 上述步骤针对已经commit过的文件 (当然如果是commit过的文件且又有改动也是同样生效)**

这样其他开发人员同步之后, 新的ignore规则就会对以前track过的文件生效了 (因为以前track的文件已经被untrack且被删除了, 如果还有这样的文件, 那肯定是新生成的! )

如果文件比较少可以直接, `git rm`掉那些不必要的文件. 有时会跟踪一些IDE的生成文件, 如Android Studio的`.idea`目录 或 构建输出文件 如 `build`目录下的文件. 对于`build`目录中的文件都是不需要跟踪的, 重新构建之后此目录就会更新, `git status`后发现此目录下的文件在更新列表中, 那么你可以使用`git rm -r --cached`命令 (*删除工作空间中有改动的那些文件, 用`git status`可以看到cached的列表*) 结合正则表达式来快速删除目录中的文件和子目录中的文件. 因此**对于已经track且有改动的文件添加ignore规则**, 如下:

1.  `git rm -r --cached 要忽略的文件` (如: `git rm -r --cahced build/*`, 如修改列表中的内容全部是不需要的, 那么你可以使用最最简单的命令搞定`git rm -r --cached .`)
2.  `git add .`
3.  `git commit -m " commet for commit ....."`
4.  `git push`

push之后其他开发人员pull之后, ignore规则就对其生效了.

*tips: 上述步骤只针对**已经commit过且有改动**的文件 (因为rm的是cached列表中的文件, cached列表即修改列表)*

三. 总结

1.  最好创建git仓库的同时创建`.gitignore`文件, 并且把忽略规则写好(尽量考虑到所有应该略的文件, 这样就可以避免出现上面的文件啦)

作者:元亨利贞o
链接:https://www.jianshu.com/p/e5b13480479b
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容