一、创建版本库
版本库(仓库),英文名repository,库里的文件修改、删除都能被Git跟踪。
1 创建一个版本库,首先选择一个合适的地方,创建一个空目录:
Pwd 命令用于显示当前目录。在我的Mac上,这个仓库位于 /Users/michael/learngit
!!!如果你使用Windows系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。
2 通过 git init 命令把这个目录变成Git可以管理的仓库:
瞬间仓库就建好了,这是一个空仓库(empty Git repository)。当前目录下有一个.git目录,这个目录是Git来跟踪管理版本库。
如果没有看到.git目录,是因为这个目录默认是隐藏的,用ls –ah命令可以看见。
3 把文件添加到版本库
注意:所有的版本控制系统,只能跟踪文本文件的改动,如TXT文件,网页多有程序代码等。版本控制系统可以明确告诉每次的改动。但是视频和图片这些二进制文件,虽然也能由版本控制系统管理,但是无法跟踪文件的变化。Microsoft的Word格式是二进制格式,因此版本控制系统是无法跟踪Word文件改动。
使用Windows的要注意:不要使用Windows自带的记事本编辑任何文本文件。会出现错误。下载Notepad++代替记事本,把默认编码设置为UTF-8 without BOM。
现在开始添加一个readme.txt文件。这个文件必须要放在learngit目录下,子目录下也可以。
第一步,用命令 git add告诉Git,把文件添加到仓库
执行这个命令,没有任何显示说明添加成功。
第二步,用命令git commit 告诉Git,把文件提交到仓库。
解释一下git commit 命令,-m 后面输入的是本次提交的说明,可以输入任何内容,最好写标注信息,方便从历史记录中找到修改记录。
命令执行成功后会告诉你,一个文件别改动,插入两行内容(readme.txt有两行内容)。
因为commit可以一次提交很多文件,可以多次add不同的文件。所以需要add,commit两部提交文件:
4修改仓库中文件(readme.txt)的内容。
运行git status ,该命令可以让我们时刻掌握仓库当前的状态。
git diff 能够知道之前修改的内容。红色文字是修改之前的,绿色文字是修改之后的。
提交修改和提交新文件是一样的两步:
第一步,git add : $ git add readme.txt。 没有任何输出
第二部,执行之前,先运行git status查看当前仓库状态:
git status告诉我们,将要被提交的修改包括readme.txt,然后就可以放心的提交了:
再次查看仓库状态:
二、版本回退
版本库中的文件不断的被修改。当文件错乱或误删等其他状况发生时,还可以从最近的一个commit恢复。
我们可以用git log命令查看历史记录,显示的是从近到远的提交日志:
如果输出信息太多,看的眼花缭乱,可以试试加 –pretty=oneline 参数:
提示:前边一大串黄色字体是commit id (版本号) ,和SVN不一样,git不是使用1,2,3…递增的数字,是SHA1计算出来的一个强大的数字,用十六进制表示。因为git是分布的版本控制系统,后面要研究多人在同一版本库里工作,如果都用1,2,3作为版本号,就会有冲突。每提交一个新版本,git会把它们自动串成一条时间线。
Git中HEAD表示当前版本,上一个是HEAD^,上上一个版本HEAD^^,往上100个携程HEAD~100.
回退到上一个版本,使用git reset:
$ cat readme.txt 查看当前版本内容(确定是上一个版本的内容):
此时查看版本记录,change it’s nice 已经没有了:
回到未来的某个版本,$ git reset –hard 版本号,版本号写前几位就可以:
当忘记想要回退到的版本号,可以使用git reflog
三、工作区和暂存区
工作区(Working Directory)
就是在电脑中能看到的目录,如 learngit 文件夹就是一个工作区
版本库(Repository)
工作区中有一个隐藏目录 .git , 这个不是工作区,是Git的版本库。
版本库中有很多东西,其中state(或index),还有Git为我们自动创建第一个分支master,以及指向master的一个指针HEAD
上传文件:
第一步,git add ,就是把文件修改添加到暂存区;
第二步,git commit,实际就是把暂存区的内容提交到当前分支。
只有将修改的文本文件 git add 加到暂存区stage中,才能使用git commit 添加到master中
四、撤销修改
1、 git checkout -- file 可以丢弃工作区的修改
上述命令表示把readme.txt文件在工作区的修改全部撤销,这里有2种情况:
一种是readme.txt自修改后还没放到暂存区,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,撤销修改就回到添加到暂存区的状态。
撤销修改就是回到最近一次git commit 或 git add 时的状态
2、 git reset HEAD file 可以把暂存区的修改撤销掉,重新放回工作区
五、删除文件
在Git中,删除也是一个修改操作。
一般情况,通常直接在文件管理器中把没用的文件删了,或者使用 rm file 命令删除
现在,有两个选择:
一个是,确实要从版本库中删除该文件,就用 git rm 删除,并且 git commit -m "xxx"
此时,文件就从版本库中删除了。
另一个是删错了,因为版本库中还有,所以可以把误删的文件恢复到最新版本中:
$ git checkout --file