1. 前言
2. git add 基本操作
3. git add 命令参数
4. git add 背后做了什么

1. 前言


众所周知,git 中有工作区、暂存区、版本库三大组成部分

工作区: 电脑中能看到的目录,也就是写代码的地方

暂存区: 英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件中,暂存区有时也叫做索引

版本库: 在工作区中有一个隐藏目录 .git,这个不算工作区,而是 git 的版本库

2. git add 基本操作


add 命令的作用就是将工作区的文件添加到暂存区

使用示例


  1. # 将某些文件提交到暂存区
  2. git add <file1> <file2>
  3. # 将某些目录提交到暂存区
  4. git add <folder1> <folder2>

3. git add 命令参数


-A, --all add changes from all tracked and untracked files 添加所有跟踪和未跟踪文件的更改

-A 参数会监控工作区的状态树,它会把工作区的所有变化提交到暂存区,包括修改(modified)、新文件(Untracked files)、删除的文件(deleted)。使用 . 在 git 2.x 也可以达到一样的效果,但在 git 1.x 中不同的是 . 不会监控删除的文件

在 git2.x 中,下面两种用法的效果完全相同


  1. git add .
  2. git add -A

-u, --update update tracked files 只更新已被跟踪文件

只监控已经被 add 的文件,也就是 tracked files,不会监控没有被跟踪的新文件


  1. git add -u

4. git add 背后做了什么


先说结论: git add 会在 .git/objects 目录下面创建一个目录和文件,并且在 .git/index 文件中添加一行内容

这里会说到 git cat-file 命令,虽然平时不怎么用,但是它能帮助我们理解 git add 背后到底做了什么

创建一个 git 仓库,用于查看 git add 背后做了什么操作


  1. $ git init
  2. $ echo 'hello git' >> 1.txt
  3. $ git add 1.txt
  4. $ .git/objects
  5. ├── 8d
  6. │ └── 0e41234f24b6da002d962a26c2495ea16a425f
  7. ├── info
  8. └── pack

执行 git add 后:

1、git 会将工作区中的文件使用 hash sha-1 算法得到 40 位的 blob 对象 hash 字符串文件,文件中存储的是文件类型和使用算法压缩后的内容,如果查看文件的原始内容,需要使用 git cat-file -p <hash>。这个文件存放在 .git/objects 目录下

2、git 会在 .git/index 文件中增加一行内容,就是 hash 值对应的文件名。此时就实现了文件名和内容相对应的操作


  1. # 查看暂存区中的文件名
  2. git ls-files
  3. # 查看暂存区中的文件更多信息
  4. git ls-files -s

100644 指的是文件权限,hash 字符串对应 .git/objects 目录下的文件

查看 hash 文件


  1. # 查看文件类型
  2. git cat-file -t <hash>
  3. # 查看文件内容
  4. git cat-file -p <hash>
  5. # 使用示例
  6. git cat-file -t 8d0e412
  7. git cat-file -p 8d0e412

git cat-file -t 查看文件类型的返回值

类型 描述
blob 存储的是工作区文件的内容
tree 工作树
commit 提交记录信息以及工作树

git add 命令详解相关推荐

  1. git reset 命令详解(二)—— Git 学习笔记 08

    git reset 命令详解(二) 上一篇博文git reset 命令详解(一)讲了 git reset 命令的基本原理和用法,这篇博文谈一谈 git reset 的另一种用法--后面跟一个路径(或文 ...

  2. git reset 命令详解(一)—— Git 学习笔记 07

    git reset 命令详解(一) 简而言之,git reset 命令是用来将当前 branch 重置到另外一个 commit 的,这个动作可能同时影响到 index 以及 work director ...

  3. Git 常用命令详解

    Git 常用命令详解 1. Git 常用命令 1.1 常用git 命令图表汇总 1.2 配置个人信息 1.3 创建版本库 1.4 常用Git命令汇总 2. Git 解决代码冲突 3. Git 分支管理 ...

  4. Git stash命令详解和使用

    Git stash命令详解和使用 stash的原理: 将本地没提交的内容(git commit的内容不会被缓存 但git add的内容会被缓存)进行缓存并从当前分支移除,缓存的数据结构为堆栈,先进后出 ...

  5. git checkout 命令详解—— Git 学习笔记 16

    git checkout 命令详解 概览 git checkout 这条命令的常用格式如下: 用法一 git checkout [<commit>] [--] <paths> ...

  6. git diff命令详解

    git diff命令详解 diff里面a表示前面那个变量,b表示第二个变量 HEAD     commit版本 Index     staged版本 a.查看尚未暂存的文件更新了哪些部分,不加参数直接 ...

  7. ROUTE ADD 命令详解

    随笔- 18  文章- 59  评论- 37 route add命令详解 1.具体功能  该命令用于在本地IP路由表中显示和修改条目.使用不带参数的ROUTE可以显示帮助.  2.语法详解  rout ...

  8. git log 命令详解

    git log 命令详解 git log 命令用于查看提交历史: git log [options] [<file> <commit> <tag>...] 如果不加 ...

  9. 运维之道 | Git log 命令详解

    Git log 命令详解 Git log 可以让我们查看提交commit history [root@localhost villian]# git log commit 7a690b414f87fb ...

最新文章

  1. 《40期》 我们要把世纪末日变成重生日
  2. MRTG—网络监控工具
  3. 没有java home_【Java安装】必须有JAVA_HOME变量吗
  4. 不是语言之争---Go vs Erlang
  5. 【数据竞赛】Kaggle知识点:树模型特征Embedding
  6. flutter 日历_Flutter:一个更贴近真实项目的练习
  7. 图片流写出 并带数据_第九章 IO流
  8. Abstract Factory(抽象工厂)--对象创建模式
  9. vue element-ui IE9--11报 “无法获取未定义或null引用的属性‘toLowerCase’”
  10. python 文件读写(追加、覆盖)
  11. php写简单接口_php写接口,对比两种写法
  12. 一句话总结重构、重载、重写
  13. Win32环境下动态链接库(DLL)编程原理
  14. Tomcat8 安装后点击startup出现闪退的解决方法(转)
  15. python 执行shell 事务_python中执行shell的两种方法总结
  16. java的argv_Java:使用org.apache.commons.cli解析传入参数args,该包会协助解析argv参数...
  17. 对一段Oracle GoldenGate (OGG) 传输进程日志(.rpt文件)的解释
  18. 中国移动的固网宽带不再免费,该项业务收入已与中国电信相当
  19. Representation Learning with Contrastive Predictive Coding
  20. Windows10安装apt-cyg教程

热门文章

  1. DLL 文件调用的2种方式
  2. stc12c5a32s2c语言程序,为什么STC12C5A32S2程序不能烧录进去啊
  3. 微信小程序在wxml页面中截取字符串
  4. Zemax 2023安装教程
  5. 上传图片限制文件大小以及尺寸大小 php
  6. 佳能hdr_(摄影后期)在佳能DPP中制造HDR,改善照片画质转载
  7. SVN 代码到Git仓库 只需几步简单粗暴 代码和小乌龟都可以
  8. mycat分库分表配置
  9. 利用朴素贝叶斯原理过滤垃圾邮件(TF-IDF算法)
  10. 快递鸟物流查询接口调用