1、Git 诞生 阅读:567484 诸多人都懂得,Linus 在 1991 年创立了开源 Linux,从此,Linux 系统不断发展,已经成为最大服务器系统软件了。Linus 虽然创立了 Linux,但 Linux 壮大是靠全世界热心志愿者参加,这样多人在世界各地为 Linux 编写代码,那 Linux 代码是如何管理呢?事实是,在此前,世界各地志愿者把源代码文献通过 diff 方式发给 Linus,然后由 Linus 本人通过手工方式合并代码!你也许会想,为什么 Linus 不把 Linux 代码放到版本控制系统里呢?不是有 CVS、SVN 这些免费版本控制系统吗?由于 Linus 坚定地反对
2、 CVS 和 SVN,这些集中式版本控制系统不但速度慢,并且必要联网才干使用。有某些商用版本控制系统,虽然比 CVS、SVN 好用,但那是付费,和 Linux 开源精神不符。但是,到了,Linux 系统已经发展了十年了,代码库之大让 Linus 很难继续通过手工方式管理了,社区兄弟们也对这种方式表达了强烈不满,于是 Linus 选取了一种商业版本控制系统BitKeeper,BitKeeper 东家 BitMover 公司出于人道主义精神,授权 Linux 社区免费使用这个版本控制系统。安定团结大好局面在就被打破了,因素是 Linux 社区牛人汇集,不免沾染了某些梁山好汉江湖习气。开发 Samb
3、aAndrew 试图破解 BitKeeper 合同(这样干其实也不只她一种),被BitMover 公司发现了(监控工作做得不错!),于是 BitMover 公司怒了,要收回 Linux 社区免费使用权。Linus 可以向 BitMover 公司道个歉,保证后来严格管教兄弟们,嗯,这是不也许。实际状况是这样:Linus 花了两周时间自己用 C 写了一种分布式版本控制系统,这就是 Git!一种月之内,Linux系统源码已经由 Git 管理了!牛是怎么定义呢?人们可以体会一下。Git 迅速成为最流行分布式版本控制系统,特别是,GitHub 网站上线了,它为开源项目免费提供 Git 存储,无数开源项目
4、开始迁移至 GitHub,涉及 jQuery,PHP,Ruby 等等。历史就是这样偶尔,如果不是当年 BitMover 公司威胁 Linux 社区,也许当前咱们就没有免费而超级好用 Git 了。集中式 vs 分布式 阅读:549874 Linus 始终痛恨 CVS 及 SVN 都是集中式版本控制系统,而 Git 是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?先说集中式版本控制系统,版本库是集中存储在中央服务器,而干活时候,用都是自己电脑,因此要先从中央服务器获得最新版本,然后开始干活,干完活了,再把自己活推送给中央服务器。中央服务器就好比是一种图书馆,你要改一本书,必要先从图书
5、馆借出来,然后回到家自己改,改完了,再放回图书馆。集中式版本控制系统最大毛病就是必要联网才干工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢话,也许提交一种 10M 文献就需要 5 分钟,这还不得把人给憋死啊。那分布式版本控制系统与集中式版本控制系统有何不同呢?一方面,分布式版本控制系统主线没有“中央服务器”,每个人电脑上都是一种完整版本库,这样,你工作时候,就不需要联网了,由于版本库就在你自己电脑上。既然每个人电脑上均有一种完整版本库,那各种人如何协作呢?比喻说你在自己电脑上改了文献 A,你同事也在她电脑上改了文献 A,这时,你们俩之间只需把各自修改推送给对方,就可
6、以互相看到对方修改了。和集中式版本控制系统相比,分布式版本控制系统安全性要高诸多,由于每个人电脑里均有完整版本库,某一种人电脑坏掉了不要紧,随便从其她人那里复制一种就可以了。而集中式版本控制系统中央服务器要是出了问题,所有人都没法干活了。在实际使用分布式版本控制系统时候,其实很少在两人之间电脑上推送版本库修改,由于也许你们俩不在一种局域网内,两台电脑互相访问不了,也也许今天你同事病了,她电脑压根没有开机。因而,分布式版本控制系统普通也有一台充当“中央服务器”电脑,但这个服务器作用仅仅是用来以便“互换”人们修改,没有它人们也同样干活,只是互换修改不以便而已。固然,Git 优势不单是不必联网这样简
7、朴,背面咱们还会看到 Git 极其强大分支管理,把 SVN等远远抛在了背面。CVS 作为最早开源并且免费集中式版本控制系统,直到当前尚有不少人在用。由于 CVS 自身设计问题,会导致提交文献不完整,版本库莫名其妙损坏状况。同样是开源并且免费 SVN修正了 CVS 某些稳定性问题,是当前用得最多集中式版本库控制系统。除了免费外,尚有收费集中式版本控制系统,例如 IBMClearCase(此前是 Rational 公司,被 IBM 收购了),特点是安装比 Windows 还大,运营比蜗牛还慢,能用 ClearCase 普通是世界 500 强,她们有个共同特点是财大气粗,或者人傻钱多。微软自己也有一
8、种集中式版本控制系统叫 VSS,集成在 Visual Studio 中。由于其反人类设计,连微软自己都不好意思用了。分布式版本控制系统除了 Git 以及促使 Git 诞生 BitKeeper 外,尚有类似 GitMercurial 和Bazaar 等。这些分布式版本控制系统各有特点,但最快、最简朴也最流行依然是 Git!安装 Git 阅读:1093239 最早 Git 是在 Linux 上开发,很长一段时间内,Git 也只能在 Linux 和 Unix 系统上跑。但是,慢慢地有人把它移植到了 Windows 上。当前,Git 可以在 Linux、Unix、Mac 和 Windows这几大平台上
9、正常运营了。要使用 Git,第一步固然是安装 Git 了。依照你当前使用平台来阅读下面文字:在 Linux 上安装 Git 一方面,你可以试着输入git,看看系统有无安装 Git:$git The program git is currently not installed.You can install it by typing:sudodo apt-getget install git 像上面命令,有诸多 Linux 会和谐地告诉你 Git 没有安装,还会告诉你如何安装 Git。如果你碰巧用 Debian 或 Ubuntu Linux,通过一条sudo apt-get install gi
10、t就可以直接完毕 Git 安装,非常简朴。老一点 Debian 或 Ubuntu Linux,要把命令改为sudo apt-get install git-core,由于此前有个软件也叫 GIT(GNU Interactive Tools),成果 Git 就只能叫git-core了。由于 Git 名气实在太大,日后就把 GNU Interactive Tools 改成gnuit,git-core正式改为git。如果是其她 Linux 版本,可以直接通过源码安装。先从 Git 官网下载源码,然后解压,依次输入:./config,make,sudo make install这几种命令安装就好了。在
11、 Mac OS X 上安装 Git 如果你正在使用 Mac 做开发,有两种安装 Git 办法。一是安装 homebrew,然后通过 homebrew 安装 Git,详细办法请参照 homebrew 文档:。第二种办法更简朴,也是推荐办法,就是直接从 AppStore 安装 Xcode,Xcode 集成了 Git,但是默认没有安装,你需要运营 Xcode,选取菜单“Xcode”-“Preferences”,在弹出窗口中找到“Downloads”,选取“Command Line Tools”,点“Install”就可以完毕安装了。Xcode 是 Apple 官方 IDE,功能非常强大,是开发 Ma
12、c 和 iOS App 必选装备,并且是免费!在 Windows 上安装 Git 实话实说,Windows 是最烂开发平台,如果不是开发 Windows 游戏或者在 IE 里调试页面,普通不推荐用 Windows。但是,既然已经上了微软贼船,也是有办法安装 Git。Windows 下要使用诸多 Linux/Unix 工具时,需要 Cygwin 这样模仿环境,Git 也同样。Cygwin安装和配备都比较复杂,就不建议你折腾了。但是,有高人已经把模仿环境和 Git 都打包好了,名叫 msysgit,只需要下载一种单独 exe 安装程序,其她什么也不用装,绝对好用。msysgit 是 Windows
13、 版 Git,从下载(网速慢同窗请移步国内镜像),然后按默认选项安装即可。安装完毕后,在开始菜单里找到“Git”-“Git Bash”,蹦出一种类似命令行窗口东西,就阐明Git 安装成功!安装完毕后,还需要最后一步设立,在命令行输入:$git config-global user.name Your Name$git config-global user.email 由于 Git 是分布式版本控制系统,因此,每个机器都必要自报家门:你名字和 Email 地址。你也许会紧张,如果有人故意冒充别人怎么办?这个不必紧张,一方面咱们相信人们都是善良无知群众,另一方面,真有冒充也是有办法可查。注意git
14、 config命令-global参数,用了这个参数,表达你这台机器上所有 Git 仓库都会使用这个配备,固然也可以对某个仓库指定不同顾客名和 Email 地址。创立版本库 阅读:1266637 什么是版本库呢?版本库又名仓库,英文名 repository,你可以简朴理解成一种目录,这个目录里面所有文献都可以被 Git 管理起来,每个文献修改、删除,Git 都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。因此,创立一种版本库非常简朴,一方面,选取一种适本地方,创立一种空目录:$mkdir learngit$cd learngit$pwd/Users/michael/lear
15、ngit pwd命令用于显示当前目录。在我 Mac 上,这个仓库位于/Users/michael/learngit。如果你使用 Windows 系统,为了避免遇到各种莫名其妙问题,请保证目录名(涉及父目录)不包括中文。第二步,通过git init命令把这个目录变成 Git 可以管理仓库:$git init Initialized empty Git repository inin/Users/michael/learngit/.git/瞬间 Git 就把仓库建好了,并且告诉你是一种空仓库(empty Git repository),细心读者可以发现当前目录下多了一种.git目录,这个目录是 G
16、it 来跟踪管理版本库,没事千万不要手动修改这个目录里面文献,否则改乱了,就把 Git 仓库给破坏了。如果你没有看到.git目录,那是由于这个目录默认是隐藏,用ls-ah命令就可以看见。也不一定必要在空目录下创立 Git 仓库,选取一种已有东西目录也是可以。但是,不建议你使用自己正在开发公司项目来学习 Git,否则导致一切后果概不负责。把文献添加到版本库 一方面这里再明确一下,所有版本控制系统,其实只能跟踪文本文献改动,例如 TXT 文献,网页,所有程序代码等等,Git 也不例外。版本控制系统可以告诉你每次改动,例如在第 5行加了一种单词“Linux”,在第 8 行删了一种单词“Windows
17、”。而图片、视频这些二进制文献,虽然也能由版本控制系统管理,但没法跟踪文献变化,只能把二进制文献每次改动串起来,也就是只懂得图片从 100KB 改成了 120KB,但究竟改了啥,版本控制系统不懂得,也没法懂得。不幸是,MicrosoftWord 格式是二进制格式,因而,版本控制系统是没法跟踪 Word 文献改动,前面咱们举例子只是为了演示,如果要真正使用版本控制系统,就要以纯文本方式编写文献。由于文本是有编码,例如中文有惯用 GBK 编码,日文有 Shift_JIS 编码,如果没有历史遗留问题,强烈建议使用原则 UTF-8 编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。使用 W
18、indows 童鞋要特别注意:千万不要使用 Windows 自带记事本记事本编辑任何文本文献。因素是 Microsoft 开发记事本团队使用了一种非常弱智行为来保存 UTF-8 编码文献,她们自作聪颖地在每个文献开头添加了0 xefbbbf(十六进制)字符,你会遇到诸多不可思议问题,例如,网页第一行也许会显示一种“?”,明明对的程序一编译就报语法错误,等等,都是由记事本弱智行为带来。建议你下载 Notepad+代替记事本,不但功能强大,并且免费!记得把 Notepad+默认编码设立为UTF-8 without BOM 即可:言归正传,当前咱们编写一种readme.txt文献,内容如下:Git
19、isis a version control system.Git isis free software.一定要放到learngit目录下(子目录也行),由于这是一种 Git 仓库,放到其她地方 Git再厉害也找不到这个文献。和把大象放到冰箱需要 3 步相比,把一种文献放到 Git 仓库只需要两步。第一步,用命令git add告诉 Git,把文献添加到仓库:$git add readme.txt 执行上面命令,没有任何显示,这就对了,Unix 哲学是“没有消息就是好消息”,阐明添加成功。第二步,用命令git commit告诉 Git,把文献提交到仓库:$git commitcommit-m w
20、rote a readme file master(root-commitcommit)cb926e7 wrote a readme file 1 file changed,2 insertions(+)createcreate mode 100644 readme.txt 简朴解释一下git commit命令,-m背面输入是本次提交阐明,可以输入任意内容,固然最佳是故意义,这样你就能从历史记录里以便地找到改动记录。嫌麻烦不想输入-m xxx行不行?的确有办法可以这样干,但是强烈不建议你这样干,由于输入阐明对自己对别人阅读都很重要。实在不想输入阐明童鞋请自行 Google,我不告诉你这个参数。
21、git commit命令执行成功后会告诉你,1 个文献被改动(咱们新添加 readme.txt 文献),插入了两行内容(readme.txt 有两行内容)。为什么 Git 添加文献需要add,commit一共两步呢?由于commit可以一次提交诸多文献,因此你可以多次add不同文献,例如:$git add file1.txt$git add file2.txt file3.txt$git commit-m add 3 files.小结 当前总结一下今天学两点内容:初始化一种 Git 仓库,使用git init命令。添加文献到 Git 仓库,分两步:第一步,使用命令git add,注意,可重复多
22、次使用,添加各种文献;第二步,使用命令git commit,完毕。时光机穿梭 阅读:737834 咱们已经成功地添加并提交了一种 readme.txt 文献,当前,是时候继续工作了,于是,咱们继续修改 readme.txt 文献,改成如下内容:Git isis a distributed version control system.Git isis free software.当前,运营git status命令看当作果:$git status#On branch master#Changes not staged for commit:#(use git add.to update what
23、 will be committed)#(use git checkout-.to discard changes in working directory)#modified:readme.txt#no changes added to commit(use git add andand/oror git commit-a)git status命令可以让咱们时刻掌握仓库当前状态,上面命令告诉咱们,readme.txt 被修改过了,但还没有准备提交修改。虽然 Git 告诉咱们 readme.txt 被修改了,但如果能看看详细修改了什么内容,自然是较好。例如你休假两周从国外回来,第一天上班时,已
24、经记不清上次怎么修改 readme.txt,因此,需要用git diff这个命令看看:$git diff readme.txt diff-git a/readme.txt b/readme.txt index 46d49bf.9247db6 100644-a/readme.txt+b/readme.txt -1,2+1,2 -Git isis a version control system.+Git isis a distributed version control system.Git isis free software.git diff顾名思义就是查看 difference,显示格式
25、正是 Unix 通用 diff 格式,可以从上面命令输出看到,咱们在第一行添加了一种“distributed”单词。懂得了对 readme.txt 作了什么修改后,再把它提交到仓库就放心多了,提交修改和提交新文献是同样两步,第一步是git add:$git add readme.txt 同样没有任何输出。在执行第二步git commit之前,咱们再运营git status看看当前仓库状态:$git status#On branch master#Changes to be committed:#(use git reset HEAD.to unstage)#modified:readme.tx
26、t#git status告诉咱们,将要被提交修改涉及 readme.txt,下一步,就可以放心地提交了:$git commitcommit-m add distributed master ea34578 addadd distributed 1 file changed,1 insertion(+),1 deletion(-)提交后,咱们再用git status命令看看仓库当前状态:$git status#On branch master nothing to commit(working directory clean)Git 告诉咱们当前没有需要提交修改,并且,工作目录是干净(worki
27、ng directory clean)。小结 要随时掌握工作区状态,使用git status命令。如果git status告诉你有文献被修改过,用git diff可以查看修改内容。版本回退 阅读:813991 当前,你已经学会了修改文献,然后把修改提交到 Git 版本库,当前,再练习一次,修改readme.txt 文献如下:Git isis a distributed version control system.Git isis free software distributed under the GPL.然后尝试提交:$git add readme.txt$git commit-m ap
28、pend GPL master 3628164 append GPL 1 file changed,1 insertion(+),1 deletion(-)像这样,你不断对文献进行修改,然后不断提交修改到版本库里,就好比玩 RPG 游戏时,每通过一关就会自动把游戏状态存盘,如果某一关没过去,你还可以选取读取前一关状态。有些时候,在打 Boss 之前,你会手动存盘,以便万一打 Boss 失败了,可以从近来地方重新开始。Git 也是同样,每当你觉得文献修改到一定限度时候,就可以“保存一种快照”,这个快照在 Git 中被称为commit。一旦你把文献改乱了,或者误删了文献,还可以从近来一种commi
29、t恢复,然后继续工作,而不是把几种月工作成果所有丢失。当前,咱们回顾一下 readme.txt 文献一共有几种版本被提交到 Git 仓库里了:版本 1:wrote a readme file Git isis a version control system.Git isis free software.版本 2:add distributed Git isis a distributed version control system.Git isis free software.版本 3:append GPL Git isis a distributed version control sy
30、stem.Git isis free software distributed under the GPL.固然了,在实际工作中,咱们脑子里怎么也许记得一种几千行文献每次都改了什么内容,否则要版本控制系统干什么。版本控制系统必定有某个命令可以告诉咱们历史记录,在 Git 中,咱们用git log命令查看:$git log commit 3628164fb26d48395383f8f31179f24e0882e1e0 Author:Michael Liao Date:Tue Aug 20 15:11:49 +0800 append GPL commit ea34578d5496d7dd233c8
31、27ed32a8cd576c5ee85 Author:Michael Liao Date:Tue Aug 20 14:53:12 +0800 add distributed commit cb926e7ea50ad11b8f9e909c05226233bf755030 Author:Michael Liao Date:Mon Aug 19 17:51:55 +0800 wrote a readme file git log命令显示从近来到最远提交日记,咱们可以看到 3 次提交,近来一次是append GPL,上一次是add distributed,最早一次是wrote a readme fil
32、e。如果嫌输出信息太多,看得眼花缭乱,可以试试加上-pretty=oneline参数:$git log-pretty=oneline 3628164fb26d48395383f8f31179f24e0882e1e0 append GPL ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file 需要情谊提示是,你看到一大串类似3628164.882e1e0是commit id(版本号),和 SVN不同样,Gitcomm
33、it id不是 1,2,3递增数字,而是一种 SHA1 计算出来一种非常大数字,用十六进制表达,并且你看到commit id和我必定不同样,以你自己为准。为什么commit id需要用这样一大串数字表达呢?由于 Git 是分布式版本控制系统,背面咱们还要研究多人在同一种版本库里工作,如果人们都用 1,2,3作为版本号,那必定就冲突了。每提交一种新版本,事实上 Git 就会把它们自动串成一条时间线。如果使用可视化工具查看Git 历史,就可以更清晰地看到提交历史时间线:好了,当前咱们启动时光穿梭机,准备把 readme.txt 回退到上一种版本,也就是“add distributed”那个版本,怎
34、么做呢?一方面,Git 必要懂得当前版本是哪个版本,在 Git 中,用HEAD表达当前版本,也就是最新提交3628164.882e1e0(注意我提交 ID 和你必定不同样),上一种版本就是HEAD,上上一种版本就是HEAD,固然往上 100 个版本写 100 个比较容易数但是来,因此写成HEAD100。当前,咱们要把当前版本“append GPL”回退到上一种版本“add distributed”,就可以使用git reset命令:$git resetset-hard HEAD HEAD i is s now atat ea34578 addadd distributed-hard参数有啥意义
35、?这个背面再讲,当前你先放心使用。看看 readme.txt 内容是不是版本add distributed:$cat readme.txt Git isis a distributed version control system.Git isis free software.果然。还可以继续回退到上一种版本wrote a readme file,但是且慢,然咱们用git log再看看当前版本库状态:$git log commit ea34578d5496d7dd233c827ed32a8cd576c5ee85 Author:Michael Liao Date:Tue Aug 20 14:53
36、:12 +0800 add distributed commit cb926e7ea50ad11b8f9e909c05226233bf755030 Author:Michael Liao Date:Mon Aug 19 17:51:55 +0800 wrote a readme file 最新那个版本append GPL已经看不到了!好比你从 21 世纪坐时光穿梭机来到了 19 世纪,想再回去已经回不去了,肿么办?办法其实还是有,只要上面命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPLcommit id是3628164.,于是就可以指定回到将来某个版本:$git
37、resetset-hard 3628164 HEAD isis now atat 3628164 append GPL 版本号没必要写全,前几位就可以了,Git 会自动去找。固然也不能只写前一两位,由于Git 也许会找到各种版本号,就无法拟定是哪一种了。再小心翼翼地看看 readme.txt 内容:$cat readme.txt Git isis a distributed version control system.Git isis free software distributed under the GPL.果然,我胡汉三又回来了。Git 版本回退速度非常快,由于 Git 在内部有个指
38、向当前版本HEAD指针,当你回退版本时候,Git 仅仅是把 HEAD 从指向append GPL:改为指向add distributed:然后顺便把工作区文献更新了。因此你让HEAD指向哪个版本号,你就把当前版本定位在哪。当前,你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本commit id怎么办?在 Git 中,总是有后悔药可以吃。当你用$git reset-hard HEAD回退到add distributed版本时,再想恢复到append GPL,就必要找到append GPLcommit id。Git 提供了一种命令git reflog用来记录你
39、每一次命令:$git reflog ea34578 HEAD0:reset:moving to HEAD 3628164 HEAD1:commit:append GPL ea34578 HEAD2:commit:add distributed cb926e7 HEAD3:commit(initial):wrote a readme file 终于舒了口气,第二行显示append GPLcommit id 是3628164,当前,你又可以乘坐时光机回到将来了。小结 当前总结一下:HEAD指向版本就是当前版本,因而,Git 容许咱们在版本历史之间穿梭,使用命令git reset-hard comm
40、it_id。穿梭前,用git log可以查看提交历史,以便拟定要回退到哪个版本。要重返将来,用git reflog查看命令历史,以便拟定要回到将来哪个版本。工作区和暂存区 阅读:536282 Git 和其她版本控制系统如 SVN 一种不同之处就是有暂存区概念。先来看名词解释。工作区(Working Directory)就是你在电脑里能看到目录,例如我learngit文献夹就是一种工作区:版本库(Repository)工作区有一种隐藏目录.git,这个不算工作区,而是 Git 版本库。Git 版本库里存了诸多东西,其中最重要就是称为 stage(或者叫 index)暂存区,尚有 Git为咱们自动
41、创立第一种分支master,以及指向master一种指针叫HEAD。分支和HEAD概念咱们后来再讲。前面讲了咱们把文献往 Git 版本库里添加时候,是分两步执行:第一步是用git add把文献添加进去,事实上就是把文献修改添加到暂存区;第二步是用git commit提交更改,事实上就是把暂存区所有内容提交到当前分支。由于咱们创立 Git 版本库时,Git 自动为咱们创立了唯一一种master分支,因此,当前,git commit就是往master分支上提交更改。你可以简朴理解为,需要提交文献修改通通放到暂存区,然后,一次性提交暂存区所有修改。俗话说,实践出真知。当前,咱们再练习一遍,先对rea
42、dme.txt做个修改,例如加上一行内容:Git isis a distributed version control system.Git isis free software distributed under the GPL.Git has a mutable index called stage.然后,在工作区新增一种LICENSE文本文献(内容随便写)。先用git status查看一下状态:$git status#On branch master#Changes not staged for commit:#(use git add.to update what will be co
43、mmitted)#(use git checkout-.to discard changes in working directory)#modified:readme.txt#Untracked files:#(use git add.to include in what will be committed)#LICENSE no changes added to commit(use git add andand/oror git commit-a)Git 非常清晰地告诉咱们,readme.txt被修改了,而LICENSE还从来没有被添加过,因此它状态是Untracked。当前,使用两次命
44、令git add,把readme.txt和LICENSE都添加后,用git status再查看一下:$git status#On branch master#Changes to be committed:#(use git reset HEAD.to unstage)#new file:LICENSE#modified:readme.txt#当前,暂存区状态就变成这样了:因此,git add命令事实上就是把要提交所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区所有修改提交到分支。$git commitcommit-m understand how stag
45、e works master 27c9860 understand how stage works 2 files changed,675 insertions(+)createcreate mode 100644 LICENSE 一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”:$git status#On branch master nothing to commit(working directory clean)当前版本库变成了这样,暂存区就没有任何内容了:小结 暂存区是 Git 非常重要概念,弄明白了暂存区,就弄明白了 Git 诸多操作究竟干了什么。没弄明白暂存区是
46、怎么回事童鞋,请向上滚动页面,再看一次。管理修改 阅读:474813 当前,假定你已经完全掌握了暂存区概念。下面,咱们要讨论就是,为什么 Git 比其她版本控制系统设计得先进,由于 Git 跟踪并管理是修改,而非文献。你会问,什么是修改?例如你新增了一行,这就是一种修改,删除了一行,也是一种修改,更改了某些字符,也是一种修改,删了某些又加了某些,也是一种修改,甚至创立一种新文献,也算一种修改。为什么说 Git 管理是修改,而不是文献呢?咱们还是做实验。第一步,对 readme.txt 做一种修改,例如加一行内容:$cat readme.txt Git isis a distributed ve
47、rsion control system.Git isis free software distributed under the GPL.Git has a mutable index called stage.Git tracks changes.然后,添加:$git add readme.txt$git status#On branch master#Changes to be committed:#(use git reset HEAD.to unstage)#modified:readme.txt#然后,再修改 readme.txt:$cat readme.txt Git isis
48、a distributed version control system.Git isis free software distributed under the GPL.Git has a mutable index called stage.Git tracks changes of files.提交:$git commitcommit-m git tracks changes master d4f25b6 git tracks changes 1 file changed,1 insertion(+)提交后,再看看状态:$git status#On branch master#Chang
49、es not staged for commit:#(use git add.to update what will be committed)#(use git checkout-.to discard changes in working directory)#modified:readme.txt#no changes added to commit(use git add andand/oror git commit-a)咦,怎么第二次修改没有被提交?别激动,咱们回顾一下操作过程:第一次修改-git add-第二次修改-git commit 你看,咱们前面讲了,Git 管理是修改,当你
50、用git add命令后,在工作区第一次修改被放入暂存区,准备提交,但是,在工作区第二次修改并没有放入暂存区,因此,git commit只负责把暂存区修改提交了,也就是第一次修改被提交了,第二次修改不会被提交。提交后,用git diff HEAD-readme.txt命令可以查看工作区和版本库里面最新版本区别:$git diff HEAD-readme.txt diff-git a/readme.txt b/readme.txt index 76d770f.a9c5755 100644-a/readme.txt+b/readme.txt -1,4+1,4 Git isis a distribut