【Git原理】深入理解git add和git commit命令

前言

年前在公司内部做了一次git原理分享,现在在这里分享其中核心部分之一:关于git add和commit命令的深入理解。我尽力用最浅显的文字和生动的图片让大家了解git原理,当然有不足之处还望大牛指点批评。

目录

1、理解几个概念:git仓库(版本库)、暂存区、HEAD、工作区
2、git add到底做了什么?
3、git commit到底做了什么?


1、理解几个概念:git仓库(版本库)、工作区、暂存区、HEAD
版本库,暂存区和工作区原理图

(1) git仓库(版本库):git仓库就是一个.git文件夹。这个文件夹内包含了很多文件(见插图2),其中有一个很重要的文件夹objects,保存了暂存区的所有文件对象,包括blob对象、tree对象、commit对象等,这些对象都是一以文件的形式来保存的。还有HEAD文件,保存着最新的提交的指针。当然很多人到这里可能还是不理解objects中的文件对象和HEAD中保存的指针到底是什么意思,没关系,下面会详细讲解。

(2)工作区:在一个项目目录中,除了.git文件的其他所有文件的集合就是工作区。

(3)暂存区:暂存区可以理解为文件从修改到最后提交到git版本库之间的一个缓存,为了防止一次提交了不必要的文件,有回退的余地,便有了暂存区。

(4)HEAD:HEAD在.git文件夹中是一个文件,文件的内容是一个32位的16进制数,这只是一个指针,他指向最近一个提交点、这个提交点实质是一个commit对象,对象里包含里多个属性,包括最后一个提交点目录结构索引、上一次提交点id、提交人、提交时间等。

2、git add到底做了什么?

(1) 首先,跟着我的思路,我们来创建一个git仓库, 通过一个例子来理解git add命令

1、首先,我们通过git init来创建一个仓库,这时会生成一个.git文件夹,这个文件夹就一个git仓库

2、创建一个文件A.java
执行 git add A.java
到.git里面的objects文件中,发现,多了一个文件夹,打开,里面有一个文件,名字是一串符号,打开这个文件,里面是一串无法识别的字符。

git add做了啥?
其实,在执行git add命令的时候,git首先会通过hash函数算出文件名A.java对应的sha-1值是1fed2a34f13dd2a34f13d,这个code是一个32位的16进制数,git会取这个code的前两位作为文件夹名在.git/objects文件夹中创建一个文件夹1f,取code的后30位作为文件名,在.git/objects/1f中创建一个文件ed2a34f13dd2a34f13d,git会将A.java的文件内容通过一定的压缩保存在这个文件中
未完待续.....

本文到这里就快结束了,文中可能有些地方没有说明清楚,欢迎指定讨论,有问题欢迎骚扰,看到会第一时间回复!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容

  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,649评论 9 163
  • 在Scrum角色中包括:产品负责人(Product Owner,PO)、ScrumMaster(SM)、开发团队(...
    ccixom阅读 3,385评论 0 1
  • 2017年6月上线的《大军师司马懿之军师联盟》,该剧从曹魏的全新视角切入,抒写了魏国大军师司马懿(yì,字仲达)跌...
    修不好_阅读 395评论 0 1
  • 一年前,或者是更久的日子之前,我被自己困在时间的孤岛,我自言自语说我等待你,沧海桑田也等待你。 湖泊伪装成天空,命...
    路远先生1阅读 463评论 5 8
  • 别皈依了绝望,我们可以皈依很多东西,但是绝望就算了,都说绝处逢生,所以时不时的给自己一些正能量让自己做一个打不倒的人。
    合肥李风丽阅读 174评论 0 0