G&GH05 删除文件和.gitignore
注意事项与声明
平台: Windows 10
作者: JamesNULLiu
邮箱: jamesnulliu@outlook.com
博客: https://www.cnblogs.com/jamesnulliu
学习笔记 转载请注明出处 欢迎留言
0. 前言
本系列文章是 git & github 的入门教程.
本系列文章优势:
- 零基础
- 深入浅出
- 知识点涵盖面广
尽管如此, 想要真正学会 git & github 建议不要看任何教程, 直接看 git 的 官方文档.
1. [rm] 删除文件
- 当 远程储存库, git储存库 和 本地文件夹 内都存在相同的文件 "a.bbb", 并且 想彻底从储存库中删除这个文件.
先用git rm删除文件 (直接在文件夹内右键删除也行):$ git rm a.bbb
查看状态:
$ git status
On branch master
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: a.bbb
这里注意, 根据他的提示, 如果错误地 add 了某文件 (例如 "c.ddd") 到 staged area, 就用命令
git restore --staged c.ddd取消添加.
接着不用add, 只需要commit和push.$ git commit -m "<message>"
$ git push origin main
这样这个文件就被同时从本地和远程删除了.
- [不建议] 当 git储存库 和 本地文件夹 内存在文件 "a.bbb" 但不相同 (就是先前 commit 了这个文件到 git repository 之后本地又进行了修改), 并且想彻底从 远程 和 git储存库 还有本地 工作文件夹 中删除这个文件.
这种情况需要强制删除 (force):$ git rm -f "a.bbb"
$ git commit -m "<message>"
$ git push origin main
- 当 远程储存库, git储存库 和 本地文件夹 内都存在相同的文件 "a.bbb", 而 只想删除 远程 和 git储存库 中的文件, 并将文件保留在本地 工作文件夹.
使用git rm --cached <file>:$ git rm --cached a.bbb
$ git commit -m "<message>"
$ git push origin main
2. .gitignore 的使用
实际开发过程中, 我们经常会希望不要将项目运行过程中生成的一些中间文件, 日志文件, 生成文件等同步到储存库里.
比如用 visual stutdio 编译并生成一段代码, 工作文件夹内会出现一些 .log 呀, .obj 呀这样的文件. 这些文件对版本管理来说可能没有很大的用处.
尽管我们可以用 git status 配合 git add <file> 一个个将自己想要推送到储存库的文件打到命令行里, 但如果面对一个很大的项目, 要添加非常多文件, 这样效率会十分低.
我们还需要知道, 下面的命令可以将 git status 输出显示的所有改动/新增的文件添加的 staged area 中:
git add .
这就是为什么我们应该写一个 ".gitignore" 文档, 用来让 git 知道哪些文件或文件夹应该被 untracked, 然后选择性地用 git add . 快速添加文件.
.gitignore 文件应该在 working tree 的最高层创建. 打开项目文件夹后, 右键新建文本文档, 吧文件名和 ".txt" 全删了只保留 ".gitignore".
以下是完整的书写规则:
A blank line matches no files, so it can serve as a separator for readability.
A line starting with # serves as a comment. Put a backslash (" \ ") in front of the first hash for patterns that begin with a hash.
Trailing spaces are ignored unless they are quoted with backslash (" \ ").
An optional prefix " ! " which negates the pattern; any matching file excluded by a previous pattern will become included again. It is not possible to re-include a file if a parent directory of that file is excluded. Git doesn’t list excluded directories for performance reasons, so any patterns on contained files have no effect, no matter where they are defined. Put a backslash (" \ ") in front of the first " ! " for patterns that begin with a literal " ! ", for example, "!important!.txt".
The slash / is used as the directory separator. separators may occur at the beginning, middle or end of the .gitignore search pattern.
If there is a separator at the beginning or middle (or both) of the pattern, then the pattern is relative to the directory level of the particular .gitignore file itself. Otherwise the pattern may also match at any level below the .gitignore level.
If there is a separator at the end of the pattern then the pattern will only match directories, otherwise the pattern can match both files and directories.
For example, a pattern doc/frotz/ matches doc/frotz directory, but not a/doc/frotz directory; however frotz/ matches frotz and a/frotz that is a directory (all paths are relative from the .gitignore file).
An asterisk " * " matches anything except a slash. The character " ? " matches any one character except " / ". The range notation, e.g. [a-zA-Z], can be used to match one of the characters in a range.
Two consecutive asterisks (" ** ") in patterns matched against full pathname may have special meaning:
A leading " ** " followed by a slash means match in all directories. For example, " **/foo " matches file or directory "foo" anywhere, the same as pattern "foo". "**/foo/bar" matches file or directory "bar" anywhere that is directly under directory "foo".
A trailing " /** " matches everything inside. For example, " abc/** " matches all files inside directory "abc", relative to the location of the .gitignore file, with infinite depth.
A slash followed by two consecutive asterisks then a slash matches zero or more directories. For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on.
Other consecutive asterisks are considered regular asterisks and will match according to the previous rules.
参考:
Pro Git, 2nd Edition(2014), Scott Chacon
https://git-scm.com/docs/gitignore
G&GH05 删除文件和.gitignore的更多相关文章
- 删除文件夹工具【fuckwinfsdel】,如 node_modules
强力删除文件夹. 安装 npm install fuckwinfsdel -g 使用 fuckwinfsdel youdir 例 fuckwinfsdel node_modules 项目地址 http ...
- linux删除文件后没有释放空间
转载 http://blog.csdn.net/wyzxg/article/details/4971843 今天发现一台服务器的home空间满了,于是要清空无用的文件,当我删除文件后,发现可用空间没有 ...
- 【改造Linux命令之rm - 删除文件或目录-】
用途说明 rm命令是常用的命令,用来删除文件或目录(remove files or directories).它也是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比 ...
- Java NIO FileVisitor 高效删除文件
在公司项目中,由于做个二维码扫码平台项目,预计每天产生的二维码图片达到十几G,所以要做个定时清理任务来定时清理图片,根据不同场景保留图片,规则是:1.二维码统一登录图片几个小时有效 2.电子名片二 ...
- 解决linux删除文件后空间没有释放问题
linux删除文件后沒有释放空间 今天发现一台服务器的home空间满了,于是要清空没用的文件,当我删除文件后,发现可用空间沒有变化 os:centos4.7 现象: 发现当前磁盘空间使用情况: [ro ...
- linux文件权限总结(创建root不可以删除文件、只可追加的日志文件等)
文件类型 对于文件和目录的访问权力是根据读访问,写访问,和执行访问来定义的. 我们来看一下 ls 命令的输出结果 [root@iZ28dr6w0qvZ test]# ls -l 总用量 72 -rw- ...
- rimraf 跨平台删除文件
利用npm script 来删除文件, "scripts": { "clear": "rm -rf dist" } 但存在一个问题,remo ...
- Grunt: 拼接代码,js丑化(压缩),css压缩,html压缩,观察文件,拷贝文件,删除文件,压缩文件
准备工作 grunt 基于nodeJs所以 nodeJs需要的基础配置都需要安装 1.Grunt 安装 npm install -g grunt-cli 这是全局安装 2.在当前文件下npm init ...
- Git永久删除文件和历史记录
目录 Git永久删除文件和历史记录 使用filter-branch 添加到.gitignore文件里并push修改后的repo 清理和回收空间 Git永久删除文件和历史记录 造成你想从git存储库中永 ...
随机推荐
- 关于NAND FLASH解扣的认识
NAND FLASH是现在非常重要的存储介质,根据出厂时厂家检测结果可分为原片(正片).白片和黑片. 所谓原片就是NAND FLASH生产厂商挑选出来的最好的晶圆,切割下来经过了各项测试之后封装成成品 ...
- 编程思想转换&体验Lambda的更优写法和Lambda标准格式
编程思想转换做什么,而不是怎么做 我们真的希望创建一个匿名内部类对象吗?不,我们只是为了做这件事情而不得不创建一个对象. 我们真正希望做的事情是:将run方法体内的代码传递给Thread类知晓. 传递 ...
- Web || Html_Css_JS
第三阶段课程介绍: web前端 l 数据库 l SpringBoot Web前端-HTML l HTML作用: 负责搭建页面结构和内容 (盖房子) l 学习HTML主要学习的就是有哪些标签 文本相关标 ...
- DHCP原理及配置
DHCP工作原理 集中的管理.分配IP地址,使client动态的获得IP地址.Gateway地址.DNS服务器地址等信息,并能够提升地址的使用率. 简单来说,DHCP就是一个不需要账号密码登录的.自动 ...
- Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round(C,D题解)
Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round C - Zero Path 在这道题目中,不可以真正地进行寻 ...
- AtCoder Beginner Contest 260 G // imos(累积和算法)
题目传送门:G - Scalene Triangle Area (atcoder.jp) 题意: 给定大小为N*N的OX矩阵,若矩阵的(s,t)处为O,其覆盖范围为:满足以下条件的所有位置(i,j) ...
- 2022-7-25 第七组 pan小堂 多态
多态 多态是继封装.继承之后,面向对象的第三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样可以描 ...
- javascript打印对象函数
//js对象打印函数 function writeObj(obj) { var description = ""; for (var i in obj) { var propert ...
- 用VS Code搞Qt6:编译附加模块
上一次水文中,老周所介绍的是编译 Qt 的基础模块-- qtbase.一次性编译所有代码可以一劳永逸,但体积相当大,编译时间较长,CPU负载大发热大,风扇转得猛,电费交得多.因此老周更喜欢分开来编译. ...
- async...await在tcp通讯中的正确用法
引言 编程能力在不断的总结中进步以及成长,最近的半年里,对之前的开源项目代码进行回归,在重构的过程中进行了很多思考,很多次都想放弃重构,毕竟一个已经在使用的项目,重构基础代码就相当于重新开发了,不过最 ...