本文紧接前文:

.gitignore文件的使用方法(学习总结版)

=============================================

本文主要讨论前文中所说的一个操作,即: .gitignore 文件一般在创建代码库之初时创建,因为一旦符合被忽略条件的文件被提交到代码库后才创建 .gitignore 文件也不会影响已经提交到代码库中的文件。

针对这个问题网上有很多讨论,并且给这种问题起了一个名:“.gitignore规则不生效”,给出的方法为:

git rm -r --cached .
git add .
git commit -m 'update .gitignore'

其实这个方法并不会删除已经保存到版本库中的文件,该方法只是将暂存库(缓存库)中数据清除(该步操作为:git rm -r --cached . ),然后创建 .gitignore 文件,然后再把当前工作目录下的文件(此时.gitignore规则已生效)重新加入到暂存库中(该步操作为:git add . ),然后再将暂存库(缓存库)(此时的暂存库中文件为经过.gitignore过滤后的文件)提交到版本库中(该步操作为:git commit -m 'update .gitignore' )。

注意: .gitignore 文件只在将工作区文件加入到暂存区时才有效,或者说 .gitignore 文件只对 “ git add 文件 ”操作有效。

为了更好的理解上面说的这个操作就需要了解git的一些工作原理了。

---------------------------------------------------------------

Git的本地数据管理可以分为三个部分 :

工作区

暂存区

版本库

工作区是我们正常编辑文件的空间,也是我们平时可见的空间。暂存区和版本库中文件是不能编辑的,只有工作区中文件可以进行编辑。

暂存区,也叫缓存区,存放的是工作区中编辑好后准备提交到版本库中的文件。工作区的文件不能直接提交到版本库中而是需要先提交到暂存区中。工作区中的文件提交到暂存区就相当于把工作区中对应的文件进行copy复制到暂存区,这也就意味着在工作区中文件提交到暂存区后如果对工作区中相应文件进行修改也会造成和暂存区中文件内容不一致。如果工作区中文件内容与暂存区中文件内容不一致,而我们又希望暂存区中文件内容更新为工作区中文件内容,那么我们就需要手动将工作区对应的文件再次通过“ git add ”的方式加入到暂存区中,这样就相当于把工作区中更改内容后的文件再次copy并覆盖暂存区中的文件。

版本库,是Git中对文件最终存储的地方,只有保存到暂存区中的文件内容才可以提交到版本库中,一旦存入到版本库中就相当于将当时的暂存区中文件copy后存入版本库。每次将暂存区中内容通过“ git commit -m ” 的方式提交到版本库中都会对所提交的内容赋值一个提交号,并记录提交者的用户名、邮箱及提交日期,最近的一次提交内容为当前版本并由HEAD标志指向,历史提交版本可以通过提交时的保存信息及提交号来进行查找。提交到版本库中的文件是不允许撤回、不允许编辑的,是对文件的永久记录,即使有了新的一次commit提交也只是将指向上次提交的HEAD标志重新指向这次的提交,曾经的提交均作为历史记录进行保存。

对于工作区、暂存区、版本库的基本操作给出下图:

同步操作:

使两个区中对应文件内容保持一致。

文件的可编辑性:

只有工作区中的文件是可以编辑的。

工作区中文件与暂存区中文件的相互同步操作:

将工作区中文件同步到暂存区中:(操作结束后工作区和暂存区中该名称文件内容保持一致)

git add "文件名"

含义为:将工作区中的某个文件copy到暂存区中。如果暂存区中已存在同名文件但文件内容不同则对其进行覆盖操作,如果暂存区中同名文件内容也相同则不进行copy操作。

git rm "文件名"

含义为:工作区空间不存在某个文件,但是暂存区中存在这个文件,该操作将暂存区中存在的这个文件删除掉。

git rm -f "文件名"

含义为:不论工作区中是否存在该文件,都将暂存区中的这个文件删除掉,如果工作区中有这个同名文件则不论该文件是否与暂存区中文件内容相同均对其一并删除。

------------------------------------------

将暂存区中文件同步到工作区中:(操作结束后工作区和暂存区中该名称文件内容保持一致)

git restore "文件名"

含义为:不论工作区空间是否存在该文件,都将暂存区中存在的这个文件保存到工作区中,即使工作区中存在同名文件也进行覆盖操作。

======================================================

暂存区中文件与版本库中文件的相互同步操作:

将暂存区中文件保存到版本库中:(操作结束后暂存区和版本库中所有文件内容保持一致)

git commit -m  "提交历史记录信息"

含义为:将暂存区中的所有文件copy一份保存到版本库中。每一次commit操作都会被记录用户名、用户邮箱、commit时间以及一个唯一的commit编号,新的commit操作不会覆盖旧的commit操作,因此一旦文件被commit到版本库中就会一直保存的,并且在版本库中会使用一个HEAD标记来一直指向最新的commit文件内容。在使用git status查看暂存区和版本库中文件内容差别时都是指版本库中的HEAD标记指向的文件内容,即最新commit的文件内容。

将版本库中最新版本的文件(最近commit提交的HEAD所指向的文件)保存到暂存区中:(操作结束后暂存区和版本库中对应的指定文件内容保持一致)

git restore --staged "文件名"

含义为:将版本库中最近commit提交的HEAD所指向的对应文件copy到暂存库中。即使暂存库已存在这个文件或者暂存库中这个文件内容与版本库中内容不一致,该操作均会使用版本库中对应的文件覆盖暂存区中的文件。

=====================================================

对暂存区中的文件进行删除操作:

git rm --cached "文件名"

含义为:删除掉暂存区中的某个文件。

git rm --cached -r "文件夹名"

含义为:迭代删除掉暂存区中的某个文件夹及其下的文件。该种方式一般用于删除暂存区中的多个文件或有文件的文件夹。

=====================================================

 
 
 
 

为了更多的介绍下Git中的使用方法,给出下面的链接,关于具体使用例子的:

 

====================================================

如果某个文件已经加入到 .gitignore 文件中,这时我们是无法使用“ git add ”的方式来进行添加的,如果要强制添加该文件到暂存区则需要命令:“ git add -f 文件名”,如:

=====================================================

.gitignore文件的使用方法(学习总结版)—— .gitignore 文件的配合用法的更多相关文章

  1. 常见的文件上传方法有哪些?Ajax文件上传原理是什么?

    Ajaxfileupload,Ajaxupload,JqueryUploadify无刷新式的文件上传,在一个页面里嵌入一个Iframe,然后在Iframe使用原生的Post表单提交.

  2. linux几种快速清空文件内容的方法

    linux几种快速清空文件内容的方法 几种快速清空文件内容的方法: $ : > filename #其中的 : 是一个占位符, 不产生任何输出. $ > filename $ echo & ...

  3. (5)VS2010无法打开gl/glaux.h头文件的解决方法

    方法:下载缺少的文件. 参考自:http://blog.csdn.net/delphiwcdj/article/details/6326586 下载源1:CSDN下载OpenGL 安装包所需文件下载: ...

  4. Python 文件对象和方法

    Python文件对象和方法 1.打开和关闭文件 Python提供了必要的函数和方法进行默认情况下的文件基本操作,我们可以用file对象做大部分文件操作. open()方法 我们必须先用Python内置 ...

  5. python进阶之路9文件的处理方法

    内容回顾 字典内置方法 1.类型转换 dict() 2.重要操作 get() d[key] = values 常用 pop() update() 键存在则修改键值对 键不存在则新增键值对 fromke ...

  6. S32DS中链接文件及启动代码学习

    S32DS中链接文件及启动代码学习 一.链接文件 <Linker Files>文件夹中有linker_flash.ld文件和linker_ram.ld文件. Linker File称为链接 ...

  7. Radmin Server-3.5 完美绿色破解版(x32 x64通用) 第三版 + 单文件制作方法

    Radmin Server v3.5 汉化破解绿色版(x32 x64通用) 第三版 下载链接: https://pan.baidu.com/s/1qYVcSQo 2016年7月8日更新第三版1.修复在 ...

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

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

  9. 深入学习Python解析并解密PDF文件内容的方法

    前面学习了解析PDF文档,并写入文档的知识,那篇文章的名字为深入学习Python解析并读取PDF文件内容的方法. 链接如下:https://www.cnblogs.com/wj-1314/p/9429 ...

  10. 深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

随机推荐

  1. java线程常见的几种方法

    线程常见的几种方法 标签(空格分隔): 多线程 Thread静态方法 1. Thread.sleep(misseconeds) 睡眠:当前线程暂停一段时间让给别的线程去运行.Sleep复活时间,根据你 ...

  2. Docker入门系列之四:Docker镜像

    在本文中,您将学习如何加快Docker构建周期并创建轻量级镜像.遵循之前的文章中的食物隐喻,我们将沙拉隐喻为Docker镜像,同时减少Docker镜像的数量. 在本系列的第3部分中,我们介绍了十几个D ...

  3. NetCore Benchmark 基准测试

    基于NetCore的基准测试Demo(控制台程序) 创建控制台程序,输入工程名称    LinqConsole 通过NuGet引用BenchmarkDotNet至工程中 编写测试代码  类:Bench ...

  4. java elasticsearch-rest-high-level-client 根据歌名搜索,创建索引,根据索引ID搜索

    1.pom 导入jar <dependency> <groupId>org.elasticsearch.client</groupId> <artifactI ...

  5. 简单理解IOC控制反转和DI依赖注入

    用过.net core框架的同学都知道,框架默认支持"构造函数"注入引用对象的方式.使用.net core框架也有一段时间了,最近去了解了一下到底什么是"依赖注入&quo ...

  6. 记一次 MatPlotLib 报错及解决方案:AttributeError: module 'matplotlib.cbook' has no attribute '_Stack'

    记一次 MatPlotLib 报错及解决方案 目录 记一次 MatPlotLib 报错及解决方案 解决方法 具体发生了什么 报错 log 1 内容 报错 log 2 内容 最近出现 MatPlotLi ...

  7. [代码]C语言进行md5,SHA256,SHA512加密

    前言 原本在学puppet,它的user资源需要设置hash后的散列值,结果-我把加密算法,shadow文件,密码破解搞了个遍- 环境 CentOS7 gcc编译器 /etc/shadow文件解析 文 ...

  8. Atcoder Beginner Contest 324 G Generate Arrays 题解-Treap

    为了更好的阅读体验,请点击这里 题目链接 套上平衡树板子就能做的很快的题,然后因为是指针存树,因此交换只需要把序列大小较小的挨个拿出来插到相应的地方即可.复杂度 \(O(N \log^2 N)\). ...

  9. RTThread 自动网卡使用问题

    最近使用 STM32 测试了一下 lwip 和 esp8266 的网络连接问题,使用 RTThread 的自动网卡时,发现不能很好的自动切换默认网卡,不能满足需求,所以自己简单的改了一下. 一.准备材 ...

  10. hive第三课:Hive函数学习

    Hive函数学习 目录 Hive函数学习 SQL练习 Hive 常用函数 关系运算 数值计算 条件函数(主要使用场景是数据清洗的过程中使用,有些构建表的过程也是需要的) 日期函数重点!!! 字符串函数 ...