git初学者必须熟记的三个概念

原文链接:http://www.zixiong.org/blog/2015/11/01/3things-git-beginners-better-remember.html

熟练使用git的人大多对git带来的效率提升赞不绝口,而初学者往往被git很多“复杂”的概念弄得晕头转向。我认为git有很多优美的设计,你理解了这些设计的思想和基本的工作原理,用起来才会知其所以然,得心应手。

commit图的概念

git存放数据的核心是一个有向无环图,每次commit或者merge都会形成一个新的节点,指向它的父节点或者父节点们(merge时)。

commit图
commit图

每个节点存放的是commit前所有文件和目录结构的快照,并根据快照计算出一个独一无二的hash值来标识这个快照。这个图的数据只会增加不会减少,也就是说,对于新手来说,怎么玩git都不会导致数据丢失,你总有办法恢复到原来的样子。
把这个commit图结构挂念在心里,并结合下一点服用,才不会被各种分支啊合并啊reset啊弄得晕头转向。

引用的概念

你见的最多的本地分支、远程分支、tag、HEAD等等,其实本质上都是对上面那个commit图的节点的引用。你可以理解为贴了一张便条。比如我在master上新建了一个分支develop.

git branch develop

引用图
引用图

你并没有真的copy了一份代码到新的分支里,你只是给这个commit图又多贴了一个叫做develop分支的便条。
分支图
分支图

当你在两个分支上又添加了新的内容时,这些便条也会随着往前往后移动。
总览图
总览图

同理,tag也是标记某一个特定版本的便条。
常见的origin/master也是一种不同的便条,它表示你上次与服务器同步master分支时的位置,origin表示它来至于不同的命名空间
HEAD是一种比较特殊的便条,它指向某一个便条,表示当前工作的节点,当然你也可以把它指向一个节点,比如执行git checkout 56ca4它就指向了根节点.
这些引用可以随意的移动,怎么玩也不会出事,因为你并没有改变commit图

分布式的概念

git区别于svn的最大的特点就是它是分布式的版本控制系统,每个仓库都可以是服务器,每个仓库也可以是客户端。服务器和客户端拥有相同的内容(那个.git文件夹)。你可以把你的代码push到同事李雷的电脑上去,然后从同事李蕾蕾的电脑上pull代码。前提是都是同一个git仓库(有相同的根节点),不管你从哪儿pull代码,git都会执行同样的合并策略,git并不知道有服务器这种角色存在。

但在实际操作中往往会有一个或多个git服务器,比如github,这是为了获得集中管理的好处。但必须明白的是git服务器的角色是虚拟出来的,不是绝对的,它在本质上和客户端的仓库没有区别。(实际上有一点点区别,服务器上的仓库没有工作区)。你可以随时跟换你的服务器。

这种分布式的设计带来了很多好处:

  • 离线提交:执行一次commit,只是给commit图增加了一个节点,不需要与服务器通信。也就是说你在出差的火车上也可以和平常一样的写代码。
  • 离线回滚:同样的,回退版本也不需要联网。因为服务器有的,你都有。
  • 精细的版本控制:我习惯于每完成一个小功能就commit一次,追踪自己的开发过程。而据说很多用svn的人,只是把svn当做同步代码的工具使用,这样就失去了版本控制的意义。
  • 简单便捷:开启一个项目,只需要执行git init就行了,而不需要建一个svn服务器。

最后

git是个小而美的工具,也是像github这样的开源社区能够发展壮大的原因之一。我前期在使用git的过程中经常感觉复杂、摸不着头脑,但在比较深入的理解了以上几个概念之后,才觉得开始上路了,对很多命令以及背后的原理都有一种恍然大悟的感觉。git在设计上很多哲学都是值得深入研究和体会的,linus torvalds不愧为大神。

几个git学习资料:

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

推荐阅读更多精彩内容