版本控制系统概述
场景一:代码备份
小明负责的模块就要完成了,就在即将发布之前的一瞬间,电脑突然蓝屏,硬盘光荣牺牲!几个月来的努力付之东流
场景二:代码还原【版本控制】
这个项目中需要一个很复杂的功能,老王摸索了一个星期!终于有了眉目,可是这被改得面目全非的代码,已经回不到从前了。
场景三:协同开发 小刚和小强先后从文件服务器上下载了同一个文件:UserDao.java。小刚在UserDao.java文件中的第 30行声明了一个方法,叫count(),先保存到了文件服务器上;小强在UserDao.java文件中的第30行声明了一个方法,叫sum(),也随后保存到了文件服务器上,于是,count()方法就只存在于小刚的记忆中了
场景四:追溯问题代码(编写人和编写时间)!
老王是另一位项目经理,每次因为项目进度挨骂之后,他都不知道该扣哪个程序员的工资!就拿这次来 说吧,有个Bug调试了30多个小时才知道是因为相关属性没有在应用初始化时赋值!可是赵四、能能、老七 都不承认是自己干的!
工作流程图
基本概念
本地仓库: 在本地主机上的一个代码库,可以独立存在,也可以与远程仓库进行关联
工作区:对任何文件的修订(增删改),都先放在工作区,工作区不与任何仓库分支进行关联
暂存区:把修订的文件,从工作区经过add(添加)后与某一个仓库分支进行关联,只有进入缓存区的文件才能commit(提交)到本地仓库。
远程仓库 :在局域网或互联网上的一个主机,存放代码库的主机或平台,比如GitHub、 Gitee.com(码云)
分支:代码存放在仓库,默认是主分支(master),可以在主分支基础上创建很多子分支,比如 develop(开发)、bugfix(bug修复)等。
.git隐藏文件夹
初始化仓库后出现
设置
# 设置全局用户名
git config --global user.name "your name"
# 设置邮箱
git config --global user.email "your email"
# 查看配置信息
git config --list
查看文件状态
#命令形式:git status [-s]
#更简洁的信息命令形式:git status -s
文件添加和更新
# 添加单个文件到暂存区
git add Readme.txt
# 将当前目录下所有修改添加到暂存区,除按照规则忽略的之外
git add .
# 如果暂存区有文件,则将其中的文件提交到仓库
git commit
# 带评论提交,用于说明提交内容、变更、作用等
git commit -m 'your comments'
版本查看和回退
git log # 显示所有提交的历史记录
git log --pretty=oneline # 单行显示提交历史记录的内容
# 会退到 commit_id 指定的提交版本
git reset --hard 'commit_id'
# 前往未来
git reflog
git reset --hard 'commit_id'
删除文件
# 文件恢复
git checkout Readme.md
git rm Readme.md // 删除已经被提交过的 Readme.md
注意 删除完文件后也要commit
忽略文件
需要新建.gitignore 并添加到仓库
分支管理概念
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
master (生产) 分支 线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;
test(测试)分支 从master创建的分支,一般作为测试部门的测试分支,进行预发测试。 测试完成后,需要合并到master分支,进行上线,中小规模项目可省略此分支;
develop(开发)分支 从test创建分支,如果开发没有test分支,是从master创建的分支,一般作为开发部门的主要开发分支 如果没有其他并行开发不同期上线要求,都可以在此版本进行开发 阶段开发完成后,需要是合并到test分支继续测试,如果没有test分支,可直接合并到master分支。
hotfix (bugfix)分支, 从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、 develop分支。
分支操作
# 查看本地分支信息
git branch
# 查看相对详细的本地分支信息
git branch -v
# 查看包括远程仓库在内的分支信息
git branch -av
# 新建一个名称为 dev 的分支
git branch dev
# 新建完 dev 分支以后,通过该命令切换到 dev 分支
git checkout dev
# 新建 dev 分支,并切换到该分支上
git checkout -b dev
# 切换回 master 分支
git checkout master
# 将 dev 分钟中的修改合并回 master 分支
git merge dev
# 删除 dev 分支
git branch -d dev
远程仓库操作
# 命令形式:git remote -v
# origin ——仓库服务器的默认名称
# 为本地仓库添加远程仓库
git remote add origin your_remote_git_repo
# 第一次推送时使用,可以简化后面的推送或者拉取命令使用 会把远程仓库和本地关联
git push -u origin master
# 将本地 master 分支推送到 origin 远程分支
git push origin master
git fetch origin master
git pull origin master
# 移除命令形式: git remote rm <shortname> 这相当于断开与远程仓库的连接
# 通过 https 协议,克隆 Github 上 git 仓库的源码
git clone https://github.com/lagou-zimu/repo1.git
# 通过 ssh 协议,克隆 Github 上 git 仓库的源码
git clone git@github.com:lagou-zimu/repo1.git
# 拉取 命令形式:git pull【远程仓库名称】【分支名称】