夸一下git
git是当前世界上最先进的分布式版本控制系统
优势:
1.不必联网
2.Git极其强大的分支管理,把SVN等远远抛在了后面。
集中式的代表CVS和SVN
分布式的代表BitKeeper,git,类似Git的Mercurial和Bazaar
git是最快最简单流行的分布式版本控制系统
安装git
创建版本库
版本库又叫responsitory,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
$cd Desktop/git //到自己的目录
$mkdir learngit //创建文件
$pwd //pwd
命令用于显示当前目录
$git init //init可以初始化一个仓库 , 文件目录下多了一个隐藏文件.git
把文件添加到版本库
添加文件之前,所要注意的文件相关的事项:
首先这里再明确一下,所有的版本控制系统,其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。版本控制系统可以告诉你每次的改动,比如在第5行加了一个单词“Linux”,在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道
Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的
因为文本是有编码的,比如中文有常用的GBK编码,日文有Shift_JIS编码,如果没有历史遗留问题,强烈建议使用标准的UTF-8编码,所有语言使用同一种编码,既没有冲突,又被所有平台所支持。
使用Windows的童鞋要特别注意:
千万不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队使用了一个非常弱智的行为来保存UTF-8编码的文件,他们自作聪明地在每个文件开头添加了0xefbbbf(十六进制)的字符,你会遇到很多不可思议的问题,比如,网页第一行可能会显示一个“?”,明明正确的程序一编译就报语法错误,等等,都是由记事本的弱智行为带来的。建议你下载Notepad++代替记事本,不但功能强大,而且免费!记得把Notepad++的默认编码设置为UTF-8 without BOM即可
git add readme.txt 文件添加到仓库 注意,可反复多次使用,添加多个文件
git commit -m "write a readme file" 提交文件到仓库
查看当前状态和修改说明
git status 查看当前文件状态,是否被修改过之类的
git diff <file> 查看文件修改前后的差异
git log 查看修改日志,git就像游戏存档一样把所有的修改存起来,没修改依次都会存一下它的修改的地方呀,时间呀,还有修改的人名
友情提示:你看到的一大串类似3628164...882e1e0
的是commit id
(版本号),和SVN不一样,Git的commit id
不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id
和我的肯定不一样,以你自己的为准。为什么commit id
需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
每提交一个新版本,实际上Git就会把它们自动串成一条时间线。如果使用可视化工具查看Git历史,就可以更清楚地看到提交历史的时间线
版本回退
git reset --hard HEAD^ //回退一个版本
git reset --hard HEAD^^ //回退两个版本
git reset --hard HEAD~100 //回退一百个版本
这段代码的语义补那么一目了然了,
首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交19dbc79500216239b12e3d9376cbf0a3710800eb(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
版本向前
那么会退了后悔了怎么办
git reflog 可以查看修改记录
这个log日志只能看到自己的提交时的commit
所以一定要写好commit,这无疑是一个优秀的习惯
git reset --hard HEAD@{1} 格式和版本回退一样,但是不是^或者~而是@{},这个意味着到达某个自己曾今的地方
这就是git中的时光机了
工作区和暂存区
工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的learngit
文件夹就是一个工作区
版本库(Repository)
工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
分支和HEAD
的概念我们以后再讲。
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
管理修改
git操作的是修改,管理的是修改而不是文件
撤销修改
git checkout --readme.txt
这个是丢弃工作区的修改,有别人git reset --hard HEAD操作
这个操作相对于删除也可以撤销
返回到上一次的git add或者git commit ,到底返回到哪一个呢,这个得看你得操作是在add到commit之间还是commit到还未继续add