标签:
一、Git简介
1、Git是什么?
Git是世界上最好用的分布式版本控制系统,它是“Linux之父” linus用C语言花了两周时间开发的又一个伟大的开源软件,当时主要用于Linux源码管理。2008年,GitHub网站上线之后,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。Git迅速成为最流行的分布式版本控制系统。
2、集中式vs分布式
集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
Linus一直痛恨的CVS及SVN都是集中式的版本控制系统。
分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,你在自己的电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
集中式版本控制系统 分布式版本控制系统
二、安装Git
1、Linux系统
Git诞生于Linux平台并率先服务于Linux内核,因此Linux系统自带Git,我们可以使用系统默认的版本,也可以使用源码安装最新版本。
CentOS6.6 Git版本 Ubuntu16.04 Git版本
2、Windows系统
windows版本下载地址:https://git-scm.com/download/win 下载安装之后貌似是图形化界面的,由于我这里采用Ubuntu系统练习,所以win版本就不研究了。
三、Git初始化
在安装完成之后,还需要做最后一步配置:
git config --global user.name "Your Name" git config --global user.email "email@example.com"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。
注意git config
命令的--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
git init 创建版本库 (目录不存在会自动创建)
从上图中初始化信息中可以看到,git init命令在工作区中创建了隐藏目录.git,这个隐藏目录就是Git的版本库(里面的东西不能随便乱改)。
把文件添加到版本库
编写一个readme.txt
文件,内容如下:
Git is a version control system. Git is free software.
readme.txt文件一定要放到learngit
目录下(子目录也可以),因为这是一个Git仓库,放到其他地方Git就找不到了。
1、git add 把文件添加到仓库
2、git commit 把文件提交到仓库:
git commit命令,-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
返回的输出信息中,master是这次提交的分支,且是该分支的第一个提交(root-commit,后面再次提交就没有这个提示了), 提交的id为 e09b1a6 .
四、时光穿梭机
1、前奏
修改readme.txt文件的内容:
Git is a distributed version control system.
Git is free software.
现在运行 git status命令查看结果:
git status
命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。
如果想要查看修改了什么内容,可以使用 git diff
git diff
顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个“distributed”单词。
修改之后还要提交到仓库:
2、版本回退
当文件经过多次修改之后,我们可能记不住改了哪些内容,这时可以使用 git log命令查看:
git log
命令显示从最近到最远的提交日志,我们可以看到4次提交,最近的一次是append GPL
,上一次是add distributed
,最早的一次是wrote a readme file
。
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline
参数:
把readme.txt回退到上一个版本,也就是“add distributed”的那个版本:
git reset --hard HEAD^ 回退到上一个版本
git reset --hard c7bb35ce 回退到指定版本
在Git中,用HEAD
表示当前版本,也就是最新的提交,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD
指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL!
Git提供了一个命令git reflog
用来记录每一次操作:
3、工作区和暂存区
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
标签:
原文地址:http://www.cnblogs.com/Rambotien/p/5620750.html