Git教程
Git教程 By 廖雪峰
史上最浅显易懂的Git教程!
为什么要编写这个教程?因为我在学习Git的过程中,买过书,也在⺴⽹网上Google了⼀一堆Git
相关的⽂文章和教程,但令⼈人失望的是,这些教程不是难 得令⼈人发指,就是简单得⼀一笔带
过,或者,只⽀支离破碎地介绍Git的某⼏几个命令,还有直接从Git⼿手册粘贴帮助⽂文档的,总
之,初学者很难找到⼀一个由浅⼊入深, 学完后能⽴立刻上⼿手的Git教程。
既然号称史上最浅显易懂的Git教程,那这个教程有什么让你怦然⼼心动的特点呢?
⾸首先,本教程绝对⾯面向初学者,没有接触过版本控制概念的读者也可以轻松⼊入⻔门,不必担⼼心
起步难度;
其次,本教程实⽤用性超强,边学边练,⼀一点也不觉得枯燥。⽽而且,你所学的Git命令是“充
分且必要”的,掌握了这些东⻄西,你就可以通过Git轻松地完成你的⼯工作。
⽂文字+图⽚片还看不明⽩白?有视频!!!
本教程只会让你成为Git⽤用户,不会让你成为Git专家。很多Git命令只有那些专家才明⽩白
(事实上我也不明⽩白,因为我不是Git专家),但我保证 这些命令可能你⼀一辈⼦子都不会⽤用
到。既然Git是⼀一个⼯工具,就没必要把时间浪费在那些“⾼高级”但⼏几乎永远不会⽤用到的命令
上。⼀一旦你真的⾮非⽤用不可了,到时候再 ⾃自⾏行Google或者请教专家也未迟。
如果你是⼀一个开发⼈人员,想⽤用上这个世界上⺫⽬目前最先进的分布式版本控制系统,那么,赶快
开始学习吧!
关于作者
廖雪峰,⼗十年软件开发经验,业余产品经理,精通Java/Python/Ruby/Visual Basic/
Objective C等,对开源框架有深⼊入研究,著有《Spring 2.0核⼼心技术与最佳实践》⼀一书,
多个业余开源项⺫⽬目托管在GitHub,欢迎微博交流:@廖雪峰。
整理、排版:numbbbbb
Git教程 By 廖雪峰
Git简介!
Git的诞⽣生!
集中式vs分布式!
安装Git!
在Linux上安装Git!
在Mac OS X上安装Git!
在Windows上安装Git!
创建版本库!
把⽂文件添加到版本库!
⼩小结!
时光机穿梭!
⼩小结!
版本回退!
⼩小结!
⼯工作区和暂存区!
⼩小结!
管理修改!
⼩小结!
撤销修改!
⼩小结!
删除⽂文件!
远程仓库!
⼩小结!
添加远程库!
⼩小结!
从远程库克隆!
⼩小结!
5
7
8
10
11
12
13
14
14
16
17
18
19
22
24
27
28
29
30
32
33
35
37
38
40
41
42
整理、排版:numbbbbb
Git教程 By 廖雪峰
分⽀支管理!
创建与合并分⽀支!
⼩小结!
解决冲突!
⼩小结!
分⽀支管理策略!
分⽀支策略!
⼩小结!
Bug分⽀支!
⼩小结!
Feature分⽀支!
⼩小结!
多⼈人协作!
⼩小结!
标签管理!
创建标签!
⼩小结!
操作标签!
⼩小结!
使⽤用GitHub!
⼩小结!
⾃自定义Git!
忽略特殊⽂文件!
⼩小结!
配置别名!
⼩小结!
搭建Git服务器!
43
44
47
49
51
53
54
54
55
57
58
59
60
63
64
65
67
68
68
69
69
70
71
72
73
74
75
整理、排版:numbbbbb
期末总结!
Git教程 By 廖雪峰
77
整理、排版:numbbbbb
Git简介
Git教程 By 廖雪峰
Git是什么?
Git是⺫⽬目前世界上最先进的分布式版本控制系统(没有之⼀一)。
Git有什么特点?简单来说就是:⾼高端⼤大⽓气上档次!
那什么是版本控制系统?
如果你⽤用Microsoft Word写过⻓长篇⼤大论,那你⼀一定有这样的经历:
想删除⼀一个段落,⼜又怕将来想恢复找不回来怎么办?有办法,先把当前⽂文件“另存
为……”⼀一个新的Word⽂文件,再接着改,改到⼀一定程度,再“另存为……”⼀一个新⽂文件,
这样⼀一直改下去,最后你的Word⽂文档变成了这样:
过了⼀一周,你想找回被删除的⽂文字,但是已经记不清删除前保存在哪个⽂文件⾥里了,只好⼀一个
⼀一个⽂文件去找,真⿇麻烦。
看着⼀一堆乱七⼋八糟的⽂文件,想保留最新的⼀一个,然后把其他的删掉,⼜又怕哪天会⽤用上,还不
敢删,真郁闷。
更要命的是,有些部分需要你的财务同事帮助填写,于是你把⽂文件Copy到U盘⾥里给她(也
可能通过Email发送⼀一份给她),然后,你继续修改 Word⽂文件。⼀一天后,同事再把Word⽂文
件传给你,此时,你必须想想,发给她之后到你收到她的⽂文件期间,你作了哪些改动,得把
你的改动和她的部分合并, 真困难。
于是你想,如果有⼀一个软件,不但能⾃自动帮我记录每次⽂文件的改动,还可以让同事协作编
辑,这样就不⽤用⾃自⼰己管理⼀一堆类似的⽂文件了,也不需要把⽂文件传来传去。如果想查看某次改
动,只需要在软件⾥里瞄⼀一眼就可以,岂不是很⽅方便?
这个软件⽤用起来就应该像这个样⼦子,能记录每次⽂文件的改动:
整理、排版:numbbbbb
Git教程 By 廖雪峰
版本
⽤用户
说明
⽇日期
1
2
3
4
张三
张三
李四
张三
删除了软件服务条款5
增加了License人数限制
财务部门调整了合同金额
延长了免费升级周期
7/12 10:38
7/12 18:09
7/13 9:51
7/14 15:17
这样,你就结束了⼿手动管理多个“版本”的史前时代,进⼊入到版本控制的20世纪。
整理、排版:numbbbbb
Git的诞⽣生
Git教程 By 廖雪峰
很多⼈人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为
最⼤大的服务器系统软件了。
Linus虽然创建了Linux,但Linux的壮⼤大是靠全世界热⼼心的志愿者参与的,这么多⼈人在世界各
地为Linux编写代码,那Linux的代码是如何管理的呢?
事实是,在2002年以前,世界各地的志愿者把源代码⽂文件通过diff的⽅方式发给Linus,然后由
Linus本⼈人通过⼿手⼯工⽅方式合并代码!
你也许会想,为什么Linus不把Linux代码放到版本控制系统⾥里呢?不是有CVS、SVN这些免
费的版本控制系统吗?因为Linus坚定地反对 CVS和SVN,这些集中式的版本控制系统不但
速度慢,⽽而且必须联⺴⽹网才能使⽤用。有⼀一些商⽤用的版本控制系统,虽然⽐比CVS、SVN好⽤用,但
那是付费的,和 Linux的开源精神不符。
不过,到了2002年,Linux系统已经发展了⼗十年了,代码库之⼤大让Linus很难继续通过⼿手⼯工⽅方
式管理了,社区的弟兄们也对这种⽅方式表达了强烈 不满,于是Linus选择了⼀一个商业的版本
控制系统BitKeeper,BitKeeper的东家BitMover公司出于⼈人道主义精神,授权Linux 社区免
费使⽤用这个版本控制系统。
安定团结的⼤大好局⾯面在2005年就被打破了,原因是Linux社区⽜牛⼈人聚集,不免沾染了⼀一些梁
⼭山好汉的江湖习⽓气。开发Samba的Andrew试图 破解BitKeeper的协议(这么干的其实也
不只他⼀一个),被BitMover公司发现了(监控⼯工作做得不错!),于是BitMover公司怒
了,要收 回Linux社区的免费使⽤用权。
Linus可以向BitMover公司道个歉,保证以后严格管教弟兄们,嗯,这是不可能的。实际情
况是这样的:
Linus花了两周时间⾃自⼰己⽤用C写了⼀一个分布式版本控制系统,这就是Git!⼀一个月之内,Linux
系统的源码已经由Git管理了!⽜牛是怎么定义的呢?⼤大家可以体会⼀一下。
Git迅速成为最流⾏行的分布式版本控制系统,尤其是2008年,GitHub⺴⽹网站上线了,它为开源
项⺫⽬目免费提供Git存储,⽆无数开源项⺫⽬目开始迁移⾄至GitHub,包括jQuery,PHP,Ruby等
等。
历史就是这么偶然,如果不是当年BitMover公司威胁Linux社区,可能现在我们就没有免费
⽽而超级好⽤用的Git了。
整理、排版:numbbbbb
集中式vs分布式
Git教程 By 廖雪峰
Linus⼀一直痛恨的CVS及SVN都是集中式的版本控制系统,⽽而Git是分布式版本控制系统,集
中式和分布式版本控制系统有什么区别呢?
先说集中式版本控制系统,版本库是集中存放在中央服务器的,⽽而干活的时候,⽤用的都是⾃自
⼰己的电脑,所以要先从中央服务器取得最新的版本,然后开始干 活,干完活了,再把⾃自⼰己
的活推送给中央服务器。中央服务器就好⽐比是⼀一个图书馆,你要改⼀一本书,必须先从图书馆
借出来,然后回到家⾃自⼰己改,改完了,再放回图书馆。
集中式版本控制系统最⼤大的⽑毛病就是必须联⺴⽹网才能⼯工作,如果在局域⺴⽹网内还好,带宽够⼤大,
速度够快,可如果在互联⺴⽹网上,遇到⺴⽹网速慢的话,可能提交⼀一个10M的⽂文件就需要5分钟,
这还不得把⼈人给憋死啊。
那分布式版本控制系统与集中式版本控制系统有何不同呢?⾸首先,分布式版本控制系统根本
没有“中央服务器”,每个⼈人的电脑上都是⼀一个完整的版本库,这 样,你⼯工作的时候,就
不需要联⺴⽹网了,因为版本库就在你⾃自⼰己的电脑上。既然每个⼈人电脑上都有⼀一个完整的版本
库,那多个⼈人如何协作呢?⽐比⽅方说你在⾃自⼰己电脑上改 了⽂文件A,你的同事也在他的电脑上改
了⽂文件A,这时,你们俩之间只需把各⾃自的修改推送给对⽅方,就可以互相看到对⽅方的修改
了。
和集中式版本控制系统相⽐比,分布式版本控制系统的安全性要⾼高很多,因为每个⼈人电脑⾥里都
有完整的版本库,某⼀一个⼈人的电脑坏掉了不要紧,随便从其他⼈人那⾥里复制⼀一个就可以了。⽽而
集中式版本控制系统的中央服务器要是出了问题,所有⼈人都没法干活了。
在实际使⽤用分布式版本控制系统的时候,其实很少在两⼈人之间的电脑上推送版本库的修改,
因为可能你们俩不在⼀一个局域⺴⽹网内,两台电脑互相访问不了,也可 能今天你的同事病了,
他的电脑压根没有开机。因此,分布式版本控制系统通常也有⼀一台充当“中央服务器”的电
脑,但这个服务器的作⽤用仅仅是⽤用来⽅方便“交换” ⼤大家的修改,没有它⼤大家也⼀一样干活,
只是交换修改不⽅方便⽽而已。
整理、排版:numbbbbb