# 版本控制系统

如果大家使用word写一个项目方案,会出现反复修改调整的情况,有时候担心删除的内容以后还需要用到,就会复制一个文件暂存起来,经过多次修改,你的文件列表可能就像下面的截图。

63651-20180916182707546-1204473891

在编写代码时,反复的修改代码是常常发生的,那如何更好的管理代码,防止出现上面的问题,就是版本控制系统需要解决的问题。

# 1.git安装和配置

63651-20170904223054569-1226906652

git是目前世界上最先进的分布式版本控制系统,是由Linux之父李纳斯·托沃兹(Linus Benedic Torvalds)于2005年4月因不满当时任何一个可用的开源版本控制系统而亲自开发。

# 1.1 安装

首先,你需要到git官网下载并安装,下载地址

image-20200719113301967

# 1.2 配置邮箱和名字

如果是第一次使用git,需要使用git config配置提交者信息,因为以后需要多人开发时,可以区分不同的修改者。

git config  --global user.name "自己的用记名"
git config  --global user.email "自己的正确的邮箱"

# 查看配置信息
git config --list

# 2. git常用命令

# 2.1 创建版本库

我们需要创建一个版本库,需要在该目录执行git init命令。我们一般把这种具有版本控制功能的目录称为工作区

# 进入你需要创建版本库的目录
cd project/my-first-git/ 
# 执行init命令初始化
git init
# Initialized empty Git repository in /project/my-first-git/.git/

执行完毕后,在项目根目录会有一个.git文件夹,该文件用来记录版本信息,出现该文件说明已经创建成功。但请注意,因为.git文件是一个隐藏文件,资源管理器没法看到。

# 2.2 添加与提交

我们需要将a.htmlb.html添加到版本库中。在git中需要执行两个步骤实现,第一步,执行add命令来确认哪些文件需要在下次提交。第二步,执行commit命令,把变更提交到版本库。

# 把a.html和b.html添加到暂存区
git add a.html b.html
# 提交文件到版本库 --message表示提交的日志,一般用来说明本次提交的改动
git commit --message "第一次提交"

# 2.3 检查状态

现在,我们修改a.html文件、删除b.html文件和添加c.html ,然后通过git status命令查看版本库中文件的状态

14.56.52

如果需要查看文件具体变更内容,可以通过git diff命令

14.56.17

# 2.4 查看提交历史

git log命令可以查看版本库所有提交历史

15.06.19

# 2.5 更快速的提交

在日常使用git做版本管理时,90%的时间都只是用到git commit -a -m "日志内容",加入-a参数表示将所有已经追踪的文件快速提交到代码仓库,而不是每次都执行git add加入到暂存区

git01

工作区:my-first-git文件夹就是我们的工作区,就是之前执行git init的那个目录

15.33.56

**暂存区:**它用来暂时存放文件,在提交前,我们可以把文件从暂存区退回工作区,或者从工作区加入暂存区。

0

**本地仓库区:**将保存在暂存区域的内容永久转储到 Git 仓库中,生成版本号。生成版本号之后,就可以任何的回退到某一个具体的版本。

# 2.6 代码回滚

git reset命令可以用于把代码回滚到某个版本,首先可以通过git log查看每次提交的哈希值,下图中黄色字体部分的一串数字就是哈希值.

16.01.10

我们需要把代码回顾到第一次提交,执行git reset --hard 77816f1bcc执行完毕后,代码就会回滚到第一次提交的代码。

16.04.59

如果你觉得复制哈希值太麻烦,还可以通过git reset --hard head~1回滚到上一次提交,其中head~1表示上一次,如果是上上次提交,就修改为head~2

# 3. 远程仓库

如果你的代码仓库需要跟别人共同开发,那就需要用到远程代码仓库帮助我们保存和共享代码。目前,全球最大的代码托管仓库是github,国内也有码云提供代码托管服务。

# 3.1 注册Github

image-20200719163642316

# 3.2 克隆仓库

克隆仓库需要用到git clone [仓库地址]命令

下面演示克隆jquery仓库的代码到本地,由于github服务器在国外,往往克隆需要较长时间

16.42.14

克隆完毕后,你的本地文件夹会增加一个jquery的仓库,这些代码和github上的是一致的,而且你可以在代码仓库中执行git命令,查看代码提交历史,回滚代码都可以

# 3.3 更新本地仓库

如果jquery源码更新了,我们需要相应更新本地文件,难道需要重新克隆仓库吗,git给我们提供了git pull命令拉取远程仓库命令更新本地仓库。

git pull

# 3.4 把本地代码推送到远程仓库

当你修改了本地仓库代码,你需要执行git push命令推送代码到远程仓库,其他开发者才能看到你的代码,推送的代码为你新增commit代码。

git push

刚才我们克隆的jquery的代码,虽然你修改了源码,推送上去是会被拒绝的,因为你没有该仓库的权限。

# 3.5 练习把仓库发不到github

  1. 登录github后,点击右上角的"New repository"

16.56.31

  1. 输入仓库名字,点击"Create repository"创建仓库

16.58.28

  1. 使用git remote add origin [远程仓库地址]让本地仓库和远程仓库进行关联
git remote add origin https://github.com/zhengguorong/my-first-git.git
  1. 把仓库推送到远程仓库的master分支
git push -u origin master

17.03.40

# 4. 分支管理

git的分支就像王者荣耀游戏里三条路,每条路的英雄可以自己补兵对线,他们补兵对线获得的经验和金币是互相独立,互不影响的。git中的分支也具有相同的特性,分支的代码互相独立,互不影响。

branch

# 4.1 分支使用的场景

在企业开发中为了让功能快速开发完毕,往往需要多位开发同时进行编码。

假设我们需要开发一个商城,功能有商城首页、商品搜索页、重构商品详情页,你被安排编写商城首页和搜索页,而另外一位同事安排重构商品详情页,开发时间为一周。

一周后,你的首页和搜索页都开发完毕,但是另外一位同事因为家里有事只完成了50%,这时候应用需要上线发布,要么等详情页重构完成,要么还原详情页到修改之前的状态,因为代码只编写了50%是没法运行的。

如果我们使用分支的技术,就没有这个烦恼了,只需要把商品首页和搜索页所在的分支代码合并到主分支即可。

# 4.3 查看分支

命令:git branch

作用:查看本地所有分支,截图中master表示分支名字,分支前的*号表示当前代码所处分支。

22.43.09

# 4.3 创建分支

命令:git branch 分支名字

作用:创建本地分支,创建的新分支和当前所处分支代码是一样的。截图中dev分支是新创建的分支,它的内容和master分支内容一致。

注意:分支名字可以为英文或者中文,但是一般不会使用中文作为分支名字。

22.45.28

# 4.4 切换分支

命令:git checkout 分支名字

作用:切换到其他分支进行开发。

22.49.51

# 4.5 创建并切换分支

命令:git checkout -b 分支名字

作用:相当于执行了git branch 分支名字再执行git checkout 分支命令这两条命令,只是用这个命令更方便,一般开发中比较常用这条命令创建分支。

22.53.31

# 4.6 删除分支

命令:git branch -D 分支名字

作用:删除分支

注意:不能删除当前所处分支,如果要删除,需要先切换到别的分支。

22.58.15

# 4.7 合并分支

命令:git merge 分支名字

作用:把分支的代码合并到当前分支。

如果合并分支和当前分支内容相同,合并时会提示Already up to date.

如果合并成功,会出现下图,提示合并了什么内容。

23.06.16