git add 命令详解
1. 前言
2. git add 基本操作
3. git add 命令参数
4. git add 背后做了什么
1. 前言
众所周知,git 中有工作区、暂存区、版本库三大组成部分
工作区: 电脑中能看到的目录,也就是写代码的地方
暂存区: 英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件中,暂存区有时也叫做索引
版本库: 在工作区中有一个隐藏目录 .git,这个不算工作区,而是 git 的版本库
2. git add 基本操作
add 命令的作用就是将工作区的文件添加到暂存区
使用示例
# 将某些文件提交到暂存区
git add <file1> <file2>
# 将某些目录提交到暂存区
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 中,下面两种用法的效果完全相同
git add .
git add -A
-u, --update
update tracked files 只更新已被跟踪文件
只监控已经被 add 的文件,也就是 tracked files,不会监控没有被跟踪的新文件
git add -u
4. git add 背后做了什么
先说结论: git add
会在 .git/objects
目录下面创建一个目录和文件,并且在 .git/index
文件中添加一行内容
这里会说到 git cat-file
命令,虽然平时不怎么用,但是它能帮助我们理解 git add
背后到底做了什么
创建一个 git 仓库,用于查看 git add 背后做了什么操作
$ git init
$ echo 'hello git' >> 1.txt
$ git add 1.txt
$ .git/objects
├── 8d
│ └── 0e41234f24b6da002d962a26c2495ea16a425f
├── info
└── pack
执行 git add 后:
1、git 会将工作区中的文件使用 hash sha-1 算法得到 40 位的 blob 对象 hash 字符串文件,文件中存储的是文件类型和使用算法压缩后的内容,如果查看文件的原始内容,需要使用 git cat-file -p <hash>
。这个文件存放在 .git/objects
目录下
2、git 会在 .git/index
文件中增加一行内容,就是 hash 值对应的文件名。此时就实现了文件名和内容相对应的操作
# 查看暂存区中的文件名
git ls-files
# 查看暂存区中的文件更多信息
git ls-files -s
100644 指的是文件权限,hash 字符串对应 .git/objects 目录下的文件
查看 hash 文件
# 查看文件类型
git cat-file -t <hash>
# 查看文件内容
git cat-file -p <hash>
# 使用示例
git cat-file -t 8d0e412
git cat-file -p 8d0e412
git cat-file -t
查看文件类型的返回值
类型 | 描述 |
---|---|
blob | 存储的是工作区文件的内容 |
tree | 工作树 |
commit | 提交记录信息以及工作树 |
git add 命令详解相关推荐
- git reset 命令详解(二)—— Git 学习笔记 08
git reset 命令详解(二) 上一篇博文git reset 命令详解(一)讲了 git reset 命令的基本原理和用法,这篇博文谈一谈 git reset 的另一种用法--后面跟一个路径(或文 ...
- git reset 命令详解(一)—— Git 学习笔记 07
git reset 命令详解(一) 简而言之,git reset 命令是用来将当前 branch 重置到另外一个 commit 的,这个动作可能同时影响到 index 以及 work director ...
- Git 常用命令详解
Git 常用命令详解 1. Git 常用命令 1.1 常用git 命令图表汇总 1.2 配置个人信息 1.3 创建版本库 1.4 常用Git命令汇总 2. Git 解决代码冲突 3. Git 分支管理 ...
- Git stash命令详解和使用
Git stash命令详解和使用 stash的原理: 将本地没提交的内容(git commit的内容不会被缓存 但git add的内容会被缓存)进行缓存并从当前分支移除,缓存的数据结构为堆栈,先进后出 ...
- git checkout 命令详解—— Git 学习笔记 16
git checkout 命令详解 概览 git checkout 这条命令的常用格式如下: 用法一 git checkout [<commit>] [--] <paths> ...
- git diff命令详解
git diff命令详解 diff里面a表示前面那个变量,b表示第二个变量 HEAD commit版本 Index staged版本 a.查看尚未暂存的文件更新了哪些部分,不加参数直接 ...
- ROUTE ADD 命令详解
随笔- 18 文章- 59 评论- 37 route add命令详解 1.具体功能 该命令用于在本地IP路由表中显示和修改条目.使用不带参数的ROUTE可以显示帮助. 2.语法详解 rout ...
- git log 命令详解
git log 命令详解 git log 命令用于查看提交历史: git log [options] [<file> <commit> <tag>...] 如果不加 ...
- 运维之道 | Git log 命令详解
Git log 命令详解 Git log 可以让我们查看提交commit history [root@localhost villian]# git log commit 7a690b414f87fb ...
最新文章
- 《40期》 我们要把世纪末日变成重生日
- MRTG—网络监控工具
- 没有java home_【Java安装】必须有JAVA_HOME变量吗
- 不是语言之争---Go vs Erlang
- 【数据竞赛】Kaggle知识点:树模型特征Embedding
- flutter 日历_Flutter:一个更贴近真实项目的练习
- 图片流写出 并带数据_第九章 IO流
- Abstract Factory(抽象工厂)--对象创建模式
- vue element-ui IE9--11报 “无法获取未定义或null引用的属性‘toLowerCase’”
- python 文件读写(追加、覆盖)
- php写简单接口_php写接口,对比两种写法
- 一句话总结重构、重载、重写
- Win32环境下动态链接库(DLL)编程原理
- Tomcat8 安装后点击startup出现闪退的解决方法(转)
- python 执行shell 事务_python中执行shell的两种方法总结
- java的argv_Java:使用org.apache.commons.cli解析传入参数args,该包会协助解析argv参数...
- 对一段Oracle GoldenGate (OGG) 传输进程日志(.rpt文件)的解释
- 中国移动的固网宽带不再免费,该项业务收入已与中国电信相当
- Representation Learning with Contrastive Predictive Coding
- Windows10安装apt-cyg教程