Git简易教程
最近,工作中的用的版本控制工具由CC切换成了Git,但由于没有系统的学习过Git的操作,导致在使用Git的过程中产生了很多问题,已经在一定程度上影响了工作效率,因此觉得有必要花点时间学习下Git的基本操作,以解决日常开发时遇到的一些问题。
这篇博客主要记录下自己学到的在当前工作中能用到的一些操作,以巩固所学,如有缺漏错误,还望指正。
学习内容主要来自廖雪峰老师的Git教程和stormzhang的《从0开始学习GitHub》。
Git简介
在学习Git的操作之前,我任务必须要先了解什么是Git,否则对于后面本地版本的一些操作会很难理解。
Git是什么?
Git是目前世界上最先进的分布式版本控制系统。
那么分布式版本控制系统和集中式版本控制系统到底有什么区别?
首先,分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
所以理论上来讲,Git是可以没有“中央服务器”的,但在实际工作中我们仍然会有一个“中央服务器”,这个“中央服务器”的作用仅仅是方便“交换”大家的修改,没有它其实也是一样能工作的,只是交换修改会不太方便。
工作区和暂存区
Git和其他版本控制工具如SVN的一个不同之处就是有暂存区的概念。
工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
简单的来讲,我们一般开发时,是在工作区中进行修改;开发完后使用add命令,就是将工作区的内容保存到暂存区(stage);再使用commit命令,就是将暂存区中的内容提交到本地的版本库中。
在工作中,我发现目前并没有把本地版本库充分利用起来,主要是因为对Git的分布式管理和暂存区的概念理解不够。
Git的基本操作
下面模拟下在本地进行代码管理时一般的开发流程:
1、将需要进行代码管理的目录初始化为Git可以管理的仓库
$ git init
Initialized empty Git repository in F:/workspace/learngit/.git/
2、创建一个文件readme.txt
3、将readme.txt
添加到暂存区
$ git add readme.txt
此时我们可以使用git status
查看下当前版本库的状态:
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: readme.txt
看到提示有一个文件没有 commit
4、提交readme.txt
,使用带-m
的commit
命令可以直接在后面加上本次提交的说明。
$ git commit -m "first commit"
[master (root-commit) bfc7583] first commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 readme.txt
这样,在本地的第一次提交就完成了。
添加文件到Git仓库,分两步:
使用命令git add <file>
,注意,可反复多次使用,添加多个文件;
使用命令git commit -m <message>
,完成。
版本回退
当然,开发的过程不会总是这么一帆风顺的,如果我们发现提交了错误的代码,想回到之前的版本应该怎么办?
首先我对我的readme.txt
文件连续做了两次修改并上传版本库的操作,然后可以看到现在的版本记录是这样的:
$ git log
commit 3d73d796cee69de296ea0005b4cb0b9c42f74070 (HEAD -> master)
Author: miraclegu <guhao032336@163.com>
Date: Sat Jul 14 18:26:58 2018 +0800
third commit
commit 0bc03a7edd80dd7c04602ca0a7f8f4b60f929dc9
Author: miraclegu <guhao032336@163.com>
Date: Sat Jul 14 18:25:57 2018 +0800
second commit
commit bfc7583377998e6a53f9ee1be60dc80f18be743b
Author: miraclegu <guhao032336@163.com>
Date: Sat Jul 14 18:14:23 2018 +0800
first commit
突然我们发现第三次修改是不需要的,我们希望把版本回退到上个版本,此时我们可以使用git reset
命令:
$ git reset --hard HEAD^
HEAD is now at 0bc03a7 second commit
这里HEAD
表示当前版本,^
表示上一版本,当然你也可以用^^
表示上上个版本,但如果你想回到第100次提交之前,这个操作显然不太好用,反正我觉得复制一百次^
是个很糟糕的操作,这是你可以找到你要回退的版本号,根据版本号来回退到指定的版本号: