- 集中式版本控制系统:版本库是集中存放在中央服务器的;必须联网才能工作;
- 分布式版本控制系统:根本没有”中央服务器”;每个人的电脑上都是一个完整的版本库;
创建版本库:
什么是版本库呢?版本库⼜又名仓库,英⽂文名repository,你可以简单理解成⼀一个目录,这个 目录⾥面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任 何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
所有的版本控制系统,其实只能跟踪文本文件的改动,⽐比如TXT文 件,⺴⽹网⻚页,所有的程序代码等等,Git也不例外。Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文 件的改动的。
把⼀一个⽂文件放到Git仓库只需要两步。
1.第一步,用命令git add
告诉Git,把文件添加到仓库:
$ git add readMe.txt
- 第二步,用命令git commit告诉Git,把文件提交到仓库:
$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
如果git status
告诉你有⽂文件被修改过,⽤用git diff
可以查看修改内容。
版本回退:
执行 git commit
命令相当于提交一个新的版本;git log
命令以查看历史记录:
$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 15:11:49 2013 +0800
append GPL
commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 14:53:12 2013 +0800
commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date: Mon Aug 19 17:51:55 2013 +0800
wrote a readme file
git log
命令显⽰从最近到最远的提交日志,我们可以看到3次提交,最近的一次 是“append GPL”,上一次是“add distributed”,最早的一次是“wrote a readme file”。 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 --pretty=oneline
参数:
$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
首先,Git必须知道当前版本是哪个版本,在Git中,⽤用HEAD表⽰示当前版本,上一个版本就是 HEAD^,上上⼀一个版本就是HEAD^^,当然往上100 个版本写100个^⽐比较容易数不过来, 所以写成HEAD~100。
回退版本使用git reset
命令,例如回退到上一个版本:
$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed
从新版本回退到旧版本,如果再想从旧版本回退到新版本怎么办呢?只要找到想要恢复的版本的commit id就好了。
$ git reset --hard 3628164
HEAD is now at 3628164 append GPL
版本号没必要写全,前几位就可以了,Git会⾃自动去找。当然也不能只写前⼀一两位,因为Git 可能会找到多个版本号,就⽆无法确定是哪⼀一个了。
现在,你回退到了某个版本,关掉了电脑,第⼆二天早上就后悔了,想恢复到新版本怎么办? 找不到新版本的commit id怎么办?Git提供了一个命令git reflog⽤用来记录你的每一次命令:
$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file
注意:
- HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使⽤用命 令git reset –hard commit_id。
- 穿梭前,⽤用git log可以查看提交历史,以便确定要回退到哪个版本。
- 要重返未来,⽤用git reflog查看命令历史,以便确定要回到未来的哪个版本。