【Git】git add
源站: 老姜博客 Git讲之git add
git add
用来将working directory
的改动状态改变到Staging
阶段.
命令格式: git add fileA ...
$ echo "ABC" > README.txt # 生成一个新文件
$ git add README.txt # git add操作
warning: LF will be replaced by CRLF in README.txt.
The file will have its original line endings in your working directory
$ git status # 查看Working Directory和Staging区域的改动情况
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.txt
#从上面的输出内容可以了解到,git status清晰的提示 当前没有commit
#同时提示如果提交,如下的改动内容将会被提交(new file: README.txt)
#另外提示可以将当前staging区域的文件转化到Working Directory,命令格式是: git rm --cached <file> ...
git add
命令将转义到Staging区域的文件会保存到Git的objects
目录下.
$ ls .git/objects/ # git add 命令执行后,会将文件内容保存到objects目录下,注意它通过hash计算的值生成二级目录接口,参见如下:
5d/ info/ pack/
$ ls .git/objects/5d/a849b5c6f00b5292b1a823b29ceb303e98585c
.git/objects/5d/a849b5c6f00b5292b1a823b29ceb303e98585c
$ git cat-file -t 5da849b5c6f00b5292b1a823b29ceb303e98585c # git cat-file -t [hash-code] 可以用来查看objects存放对象的类型
blob
$ git cat-file -p 5da849b5c6f00b5292b1a823b29ceb303e98585c # git cat-file -p [hash-code] 可以用来查看objects存放的内容
ABC
objects
目录下面可能存在如下四种类型的对象:
- blob: 用来存储单个文件的内容
- tree: 一个tree对象保存的内容主要是指向其他的blob或者子tree对象
- commit: 用来存放commit的相关信息,包含提交人、指向的tree对象
- tag: 相当于一个标签,主要用来便于指向特定的commit对象.
以上四种类别的对象共同来组成完成的git tree,所有的git 命令操作都是围绕整个树的处理,可以通过如下的图了解各个类型的组合关系:
git add
:命令执行的结果是创建一个新的blob
类别节点,但是此时blob
对象并没有被其他tree
对象关联,相当于处于游离态的,需要我们进一步使用git commit
将其关联到整个git tree上,赶紧去了解下一节内容吧
git中保存文件的历史改动记录,并不是通过diff文件来完成的,而是保存新的文件的完整内容,这样对于日常开发普通程序源文件而已其实没有很大的影响,但是如果里面保存一些具有二进制格式的文件,可能影响就比较大了,比如excel模板,word格式的接口文档.
还没有评论,来说两句吧...