前言
Git是一个开源的分布式版本控制系统。其核心就在于版本控制。
在实际编码过程中,我们往往会忘记上次对文件的修改内容。若是刚刚修改的还好说,撤销操作即可。但若这是你昨天做的修改并关闭了IDE呢?所以我们需要有一个可以回退版本的工具。
Git还有另一个作用便是多人协作开发——将代码文件上传至云端,partner可以随时下载至自己的电脑,又可以随时做好修改再上传至云端。
我将学习Git分为三块,大家跟着我的步骤做一遍也就会了。
- 配置Git及配置Github
- 本地Git操作
- 远程推送操作
配置Git及配置Github
首先分清楚Git和Github的作用分别是什么。你们可以理解为——Git是运输的小车,Github是仓库,我们将东西装上车,然后让他送到仓库去。
要想使用Git及Github服务,必须得创建Github账号,Github官网:https://github.com/。
创建好账号后,再new一个repository。然后,我们接着配置Git。
我们需要先下载Git工具,这是Git官网:https://git-scm.com,根据自己计算机的系统下载即可。
而后我们需要在本地创建ssh key:
$ ssh-keygen -t rsa -C "your_email@youremail.com"
后面的your_email@youremail.com改为你在github上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的ssh key。
回到github上,点击右上角头像,选择Settings(账户配置),选择左边栏的SSH and GPG keys,点击new SSH key,title随便填,粘贴上你电脑上生成的key。
配置完ssh key后,我们还需要配置username和email:
$ git config --global user.name "your name" $ git config --global user.email "your_email@youremail.com"至此,Git的配置和Github的配置已经结束了,你已经有了可用的Git和可用的Github。接下来我们来学习如何进行本地Git操作。
本地Git操作
首先要学习几个概念——工作区,暂存区,版本库。他们之间的关系如下图

这三个区域其实没有什么神秘的,他们都是个文件夹(为树结构)。他们的作用分别为
- 工作区:实际持有的文件夹,即你可以在 我的电脑 里找到的文件夹。用于实际项目开发。
- 暂存区:他就如同一个缓存,可以频繁地将工作区中的文件发送到其中,从而使发送过来的修改后的文件覆盖暂存区中的原文件。
- 版本库:暂存区将他的文件发送到版本库中,用于发送到Github仓库中,作为最新版本。
这三个区域之间的关系及功能搞清楚了,接下来我会先说最重要的Git操作,学会这些操作后就可以直接进行生产活动了。而后,我再陈列其他较重要的的Git操作及更深层的辨析。
首先,创建一个文件夹做为工作区,不过要想这个文件夹成为工作区,需要cd到该文件夹,输入git init哦!这样其才是工作区,而不是普通的文件夹,切记。
然后,我们在文件夹中随意进行修改,如创建txt文件等。我在文件夹中创建了一个experiment.txt文件,并写入内容。根据上图,我们需要将工作区的文件发送到暂存区,使用git add -A,该命令的意义为将所有的改动发送到暂存区中。(实际上还有很多种git add方法,但一般来说git add -A已经足够。)
再然后,将暂存区的文件发送到版本库中,使用git commit -m 'comments',其中comments为你对这个版本的说明文字。
好了,本地Git操作已经结束了,是不是非常简单?只要三步就好了,我们来复习一遍。
$ git init $ git add -A $ git commit -m 'comments'基础的讲好了,如果觉得已经够用的,可以跳过下一阶段。我们接下来进入更深的层次。
为什么要有暂存区
为什么要有暂存区,我们每次将实际改动的文件直接发送到版本库不就好了?这样也没有任何问题啊,还省了一步。
其实你想的没有错,这样是没有问题的。不过这与软件开发的一大基础原则背道而驰了——单一职责原则。若是没有暂存区,那么版本库就得既负责提交版本,又得负责保存修改,使得Git一点也不优雅。这是两个完全不同的功能,应该由两个模块去分别完成。
分支
引用自https://guides.github.com/activities/hello-world/ 的一句话:
Have you ever saved different versions of a file?
Branches accomplish similar goals in GitHub repositories.
意思就是:你是否为一个文件备份了许多不同版本,在GitHub中分支完成同样的目标。
我们之所以为一个文件备份好多份文件,就是担心我们不备份的话,代码打着打着,突然发现出现了bug,而我们却实在改不过来了,最简单的方法就是回到没有修改前的状态,但我们已经回退不回去了。这样的话,真的就是心态爆炸。
所以我们备份,但是最终我们发现,桌面一团糟。
