前面的 GitHub 系列文章介绍过,GitHub 是基于 Git 的,因此也就意味着 Git 是基础,若是你不会 Git ,那么接下来你彻底继续不下去,因此今天的教程就来讲说 Git ,固然关于 Git 的知识单凭一篇文章确定说不完的,我这篇文章先介绍一些最基本的、最经常使用的一些 Git 知识,争取让大家 Git 速成。git
Git 是 Linux 发明者 Linus 开发的一款新时代的版本控制系统,那什么是版本控制系统呢?怎么理解?网上一大堆详细的介绍,可是大多枯燥乏味,对于新手也很难理解,这里我只举几个例子来帮助大家理解。github
熟悉编程的知道,咱们在软件开发中源代码实际上是最重要的,那么对源代码的管理变得异常重要:编程
好比为了防止代码的丢失,确定本地机器与远程服务器都要存放一份,并且还须要有一套机制让本地能够跟远程同步;windows
又好比咱们常常是好几我的作同一个项目,都要对一份代码作更改,这个时候须要你们互不影响,又须要各自能够同步别人的代码;缓存
又好比咱们开发的时候免不了有bug,有时候刚发布的功能就出现了严重的bug,这个时候须要紧急对代码进行还原;服务器
又好比随着咱们版本迭代的功能愈来愈多,可是咱们须要清楚的知道历史每个版本的代码更改记录,甚至知道每一个人历史提交代码的状况;微信
等等等相似以上的状况,这些都是版本控制系统能解决的问题。因此说,版本控制是一种记录一个或若干文件内容变化,以便未来查阅特定版本修订状况的系统,对于软件开发领域来讲版本控制是最重要的一环,而 Git 毫无疑问是当下最流行、最好用的版本控制系统。工具
上面说了,Git 是一个版本控制系统,你也能够理解成是一个工具,跟 Java 相似,使用以前必须得先下载安装,因此第一步必需要安装,我用的是 Mac , Mac 上其实系统自带 Git 的,不过这里统一提供一下各平台的安装方式,这部分就不过多介绍,相信你们这里搞的定。学习
Linux:apt-get install git
安装好 Git 以后,怎么学习是个问题,其实关于 Git 有不少图形化的软件能够操做,可是我强烈建议你们从命令行开始学习理解,我知道没接触过命令行的人可能会很抵触,可是个人亲身实践证实,只有一开始学习命令行,以后你对 Git 的每一步操做才能理解其意义,而等你熟练以后你想用任何的图形化的软件去操做彻底没问题。
我一开始教咱们团队成员全是基于命令行的,过后证实他们如今已经深深爱上命令行没法自拔,他们很理解 Git 每一步操做的具体含义,以至于在实际项目不多犯错,因此我这里也是基于命令行去教大家学习理解。
怎么判断你 Git 有没有安装成功?请在命令行里输入 git ,若是出现如下提示证实你已经安装成功了。
Git 全部的操做命令开头都要以 git 开头,上面列举了最经常使用的一些 Git 命令,紧接着会有一句英文解释这个命令的意义,都不是很难的单词,不妨试着看一下,不过没有实际操做你仍然很差理解,下面咱们来以一个实际的操做来介绍下一些经常使用命令的含义。
第一步,咱们先新建一个文件夹,在文件夹里新建一个文件(我是用 Linux 命令去新建的,Windows用户能够本身手动新建)
mkdir test (建立文件夹test)
cd test (切换到test目录)
touch a.md (新建a.md文件)
这里提醒下:在进行任何 Git 操做以前,都要先切换到 Git 仓库目录,也就是先要先切换到项目的文件夹目录下。
这个时候咱们先随便操做一个命令,好比 git status ,能够看到以下提示(别纠结颜色之类的,配置与主题不同而已):
意思就是当前目录还不是一个 Git 仓库。
这个时候用到了第一个命令,表明初始化 git 仓库,输入 git init 以后会提示:
能够看到初始化成了,至此 test 目录已是一个 git 仓库了。
紧接着咱们输入 git status 命令,会有以下提示:
默认就直接在 master 分支,关于分支的概念后面会提,这时最主要的是提示 a.md 文件 Untracked files ,就是说 a.md 这个文件尚未被跟踪,尚未提交在 git 仓库里呢,并且提示你可使用 git add <file> 去操做你想要提交的文件。
git status 这个命令顾名思义就是查看状态,这个命令能够算是使用最频繁的一个命令了,建议你们没事就输入下这个命令,来查看你当前 git 仓库的一些状态。
上面提示 a.md 文件尚未提交到 git 仓库里,这个时候咱们能够随便编辑下 a.md 文件,而后输入 git add a.md ,而后再输入 git status :
此时提示如下文件 Changes to be committed , 意思就是 a.md 文件等待被提交,固然你可使用 git rm --cached 这个命令去移除这个缓存。
接着咱们输入 git commit -m 'first commit' ,这个命令什么意思呢? commit 是提交的意思,-m 表明是提交信息,执行了以上命令表明咱们已经正式进行了第一次提交。
这个时候再输入 git status ,会提示 nothing to commit。
这个时候咱们输入 git log 命令,会看到以下:
git log 命令能够查看全部产生的 commit 记录,因此能够看到已经产生了一条 commit 记录,而提交时候的附带信息叫 'first commit' 。
看到这里估计不少人会有疑问,我想要提交直接进行 commit 不就好了么,为何先要再 add 一次呢?首先 git add 是先把改动添加到一个「暂存区」,你能够理解成是一个缓存区域,临时保存你的改动,而 git commit 才是最后真正的提交。这样作的好处就是防止误提交,固然也有办法把这两步合并成一步,不事后面再介绍,建议新手先循序渐进的一步步来。
branch 即分支的意思,分支的概念很重要,尤为是团队协做的时候,假设两我的都在作同一个项目,这个时候分支就是保证两人能协同合做的最大利器了。举个例子,A, B俩人都在作同一个项目,可是不一样的模块,这个时候A新建了一个分支叫a, B新建了一个分支叫b,这样A、B作的全部代码改动都各自在各自的分支,互不影响,等到俩人都把各自的模块都作完了,最后再统一把分支合并起来。
执行 git init 初始化git仓库以后会默认生成一个主分支 master ,也是你所在的默认分支,也基本是实际开发正式环境下的分支,通常状况下 master 分支不会轻易直接在上面操做的,大家能够输入 git branch 查看下当前分支状况:
若是咱们想在此基础上新建一个分支呢,很简单,执行 git branch a 就新建了一个名字叫 a 的分支,这时候分支 a 跟分支 master 是如出一辙的内容,咱们再输入 git branch 查看的当前分支状况:
可是能够看到 master 分支前有个 * 号,即虽然新建了一个 a 的分支,可是当前所在的分支仍是在 master 上,若是咱们想在 a 分支上进行开发,首先要先切换到 a 分支上才行,因此下一步要切换分支
git checkout a
执行这个命令,而后再输入 git branch 查看下分支状况:
能够看到当前咱们在的分支已是a了,这个时候 A 同窗就能够尽情的在他新建的a分支去进行代码改动了。
那有人就说了,我要先新建再切换,未免有点麻烦,有没有一步到位的,聪明:
git checkout -b a
这个命令的意思就是新建一个a分支,而且自动切换到a分支。
A同窗在a分支代码写的不亦乐乎,终于他的功能完工了,而且测试也都ok了,准备要上线了,这个时候就须要把他的代码合并到主分支master上来,而后发布。git merge 就是合并分支用到的命令,针对这个状况,须要先作两步,第一步是切换到 master 分支,若是你已经在了就不用切换了,第二步执行 git merge a ,意思就是把a分支的代码合并过来,不出意外,这个时候a分支的代码就顺利合并到 master 分支来了。为何说不出意外呢?由于这个时候可能会有冲突而合并失败,留个包袱,这个到后面进阶的时候再讲。
有新建分支,那确定有删除分支,假如这个分支新建错了,或者a分支的代码已经顺利合并到 master 分支来了,那么a分支没用了,须要删除,这个时候执行 git branch -d a 就能够把a分支删除了。
有些时候可能会删除失败,好比若是a分支的代码尚未合并到master,你执行 git branch -d a 是删除不了的,它会智能的提示你a分支还有未合并的代码,可是若是你非要删除,那就执行 git branch -D a 就能够强制删除a分支。
咱们在客户端开发的时候常常有版本的概念,好比v1.0、v1.1之类的,不一样的版本确定对应不一样的代码,因此我通常要给咱们的代码加上标签,这样假设v1.1版本出了一个新bug,可是又不晓得v1.0是否是有这个bug,有了标签就能够顺利切换到v1.0的代码,从新打个包测试了。
因此若是想要新建一个标签很简单,好比 git tag v1.0 就表明我在当前代码状态下新建了一个v1.0的标签,输入 git tag 能够查看历史 tag 记录。
能够看到我新建了两个标签 v1.0、v1.1。
想要切换到某个tag怎么办?也很简单,执行 git checkout v1.0 ,这样就顺利的切换到 v1.0 tag的代码状态了。
OK,以上全是一些最基本的Git操做,并且全是在本地环境进行操做的,彻底没有涉及到远程仓库,下一章节将以远程 GitHub 仓库为例,讲解下本地如何跟远程仓库一块儿同步协做,另外今天讲的全是最基础最简单的Git操做,一步步来,后续再继续讲解一下Git的高阶以及一些Git的酷炫操做。
另外,考虑到可能会有人嫌我讲解的太基础太慢,毕竟我是针对小白,因此得一步步来,火烧眉毛的想要提早本身学习的不妨在我公众号 AndroidDeveloper 回复「git」关键字,获取一份我推荐的还不错的 Git 学习资料,不谢,毕竟我这么帅!
本文原创发布于微信公众号 AndroidDeveloper「googdev」,转载请务必注明出处!