# 版本控制系统
如果大家使用word写一个项目方案,会出现反复修改调整的情况,有时候担心删除的内容以后还需要用到,就会复制一个文件暂存起来,经过多次修改,你的文件列表可能就像下面的截图。
在编写代码时,反复的修改代码是常常发生的,那如何更好的管理代码,防止出现上面的问题,就是版本控制系统需要解决的问题。
# 1.git安装和配置
git是目前世界上最先进的分布式版本控制系统,是由Linux之父李纳斯·托沃兹(Linus Benedic Torvalds)于2005年4月因不满当时任何一个可用的开源版本控制系统而亲自开发。
# 1.1 安装
首先,你需要到git官网下载并安装,下载地址
# 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.html
和b.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
命令查看版本库中文件的状态
如果需要查看文件具体变更内容,可以通过git diff
命令
# 2.4 查看提交历史
git log
命令可以查看版本库所有提交历史
# 2.5 更快速的提交
在日常使用git做版本管理时,90%的时间都只是用到git commit -a -m "日志内容"
,加入-a
参数表示将所有已经追踪的文件快速提交到代码仓库,而不是每次都执行git add
加入到暂存区
工作区:my-first-git
文件夹就是我们的工作区,就是之前执行git init
的那个目录
**暂存区:**它用来暂时存放文件,在提交前,我们可以把文件从暂存区退回工作区,或者从工作区加入暂存区。
**本地仓库区:**将保存在暂存区域的内容永久转储到 Git 仓库中,生成版本号。生成版本号之后,就可以任何的回退到某一个具体的版本。
# 2.6 代码回滚
git reset
命令可以用于把代码回滚到某个版本,首先可以通过git log
查看每次提交的哈希值,下图中黄色字体部分的一串数字就是哈希值.
我们需要把代码回顾到第一次提交,执行git reset --hard 77816f1bcc
执行完毕后,代码就会回滚到第一次提交的代码。
如果你觉得复制哈希值太麻烦,还可以通过git reset --hard head~1
回滚到上一次提交,其中head~1
表示上一次,如果是上上次提交,就修改为head~2
# 3. 远程仓库
如果你的代码仓库需要跟别人共同开发,那就需要用到远程代码仓库帮助我们保存和共享代码。目前,全球最大的代码托管仓库是github,国内也有码云提供代码托管服务。
# 3.1 注册Github
# 3.2 克隆仓库
克隆仓库需要用到git clone [仓库地址]
命令
下面演示克隆jquery仓库的代码到本地,由于github服务器在国外,往往克隆需要较长时间
克隆完毕后,你的本地文件夹会增加一个jquery的仓库,这些代码和github上的是一致的,而且你可以在代码仓库中执行git命令,查看代码提交历史,回滚代码都可以
# 3.3 更新本地仓库
如果jquery源码更新了,我们需要相应更新本地文件,难道需要重新克隆仓库吗,git给我们提供了git pull
命令拉取远程仓库命令更新本地仓库。
git pull
# 3.4 把本地代码推送到远程仓库
当你修改了本地仓库代码,你需要执行git push
命令推送代码到远程仓库,其他开发者才能看到你的代码,推送的代码为你新增commit
代码。
git push
刚才我们克隆的jquery的代码,虽然你修改了源码,推送上去是会被拒绝的,因为你没有该仓库的权限。
# 3.5 练习把仓库发不到github
- 登录github后,点击右上角的"New repository"
- 输入仓库名字,点击"Create repository"创建仓库
- 使用
git remote add origin [远程仓库地址]
让本地仓库和远程仓库进行关联
git remote add origin https://github.com/zhengguorong/my-first-git.git
- 把仓库推送到远程仓库的master分支
git push -u origin master
# 4. 分支管理
git的分支就像王者荣耀游戏里三条路,每条路的英雄可以自己补兵对线,他们补兵对线获得的经验和金币是互相独立,互不影响的。git中的分支也具有相同的特性,分支的代码互相独立,互不影响。
# 4.1 分支使用的场景
在企业开发中为了让功能快速开发完毕,往往需要多位开发同时进行编码。
假设我们需要开发一个商城,功能有商城首页、商品搜索页、重构商品详情页,你被安排编写商城首页和搜索页,而另外一位同事安排重构商品详情页,开发时间为一周。
一周后,你的首页和搜索页都开发完毕,但是另外一位同事因为家里有事只完成了50%,这时候应用需要上线发布,要么等详情页重构完成,要么还原详情页到修改之前的状态,因为代码只编写了50%是没法运行的。
如果我们使用分支的技术,就没有这个烦恼了,只需要把商品首页和搜索页所在的分支代码合并到主分支即可。
# 4.3 查看分支
命令:git branch
作用:查看本地所有分支,截图中master
表示分支名字,分支前的*
号表示当前代码所处分支。
# 4.3 创建分支
命令:git branch 分支名字
作用:创建本地分支,创建的新分支和当前所处分支代码是一样的。截图中dev
分支是新创建的分支,它的内容和master
分支内容一致。
注意:分支名字可以为英文或者中文,但是一般不会使用中文作为分支名字。
# 4.4 切换分支
命令:git checkout 分支名字
作用:切换到其他分支进行开发。
# 4.5 创建并切换分支
命令:git checkout -b 分支名字
作用:相当于执行了git branch 分支名字
再执行git checkout 分支命令
这两条命令,只是用这个命令更方便,一般开发中比较常用这条命令创建分支。
# 4.6 删除分支
命令:git branch -D 分支名字
作用:删除分支
注意:不能删除当前所处分支,如果要删除,需要先切换到别的分支。
# 4.7 合并分支
命令:git merge 分支名字
作用:把分支的代码合并到当前分支。
如果合并分支和当前分支内容相同,合并时会提示Already up to date.
如果合并成功,会出现下图,提示合并了什么内容。