git分布式版本控制工具
1、版本控制器的方式
a、集中式版本控制工具
集中式版本控制工具,版本库是集中存放在中央服务器的,team里每个人work时从中央服务器下载代码,是必须联网才能工作,局域网或互联网。个人修改后然后提交到中央版本库。
举例:SVN和CVS
b、分布式版本控制工具
分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,无需要联网了,因为版本库就在你自己的电脑上。多人协作只需要各自的修改推送给对方,就能互相看到对方的修改了。
举例:Git
2、Git常用命令
指令 | 说明 |
---|---|
ls/ll | 查看当前目录 |
cat | 查看文件内容 |
touch | 创建文件 |
vi | vi编辑器 |
- Git GUI:Git提供的图形界面工具
- Git Bash:Git提供的命令行工具
3、基础操作指令
Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。
git add
(工作区—>暂存区)git commit
(暂存区—>本地仓库)
3.1 查看修改的状态
- 作用:查看修改的状态(暂存区,工作区)
- 命令形式:
git status
3.2 添加工作区到暂存区
- 作用:添加工作区的一个或多个文件的修改到暂存区
- 命令形式:
git add .
(将所有修改加入暂存区)
3.3 提交暂存区到本地仓库
- 作用:提交暂存区内容到本地仓库的当前分支
- 命令形式:
git commit -m'注释内容'
3.4 查看提交日志
- 命令形式:
git log [option]
options | 说明 |
---|---|
--all | 显示所有分支 |
--pretty=oneline | 将提交信息显示为一行 |
--abbrev-commit | 使得输出的commitld更简单 |
--graph | 以图的形式显示 |
3.5 版本回退
- 作用:版本切换
- 命令形式:
git reset --hard commitID
- 可通过
git reflog
查看已经删除的提交记录
4、分支
几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
4.1 基本指令
命令 | 功能 |
---|---|
git branch | 查看本地分支 |
git branch 分支名 | 创建本地分支 |
git checkout 分支名 | 切换分支 |
git checkout -b 分支名 | 创建并切换 |
git merge | 合并分支 |
git branch -d b1 | 删除分支,需要做检查(不能删除当前分支) |
git branch -D b1 | 不做任何检查,强制删除 |
4.2 解决冲突
当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:
- 处理文件中冲突的地方
- 将解决完冲突的文件加入暂存区(add)
- 提交到仓库(commit)
4.3 开发中分支使用原则
几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。
在开发中,一般有如下分支使用原则与流程:
- master(生产)分支
线上分支,主分支,中小规模项目作为线上运行的应用对应的分支; - develop(开发)分支
是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。 - featurelxxxx分支
从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支。 - hotfix/xxxx分支
从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、develop分支。 - 还有一些其他分支,在此不再详述,例如test分支(用于代码测试)、pre分支(预上线分支)等等。
5、Git远程仓库
5.1 添加远程仓库
命令: git remote add <远端名称> <仓库路径>
- 远端名称,默认是origin,取决于远端服务器设置。
- 仓库路径,从远端服务器获取此URL
5.2 查看远程仓库
命令: git remote
5.3 推送到远程仓库
命令: git push [-f] [--set-upstream][远端名称[本地分支名][:远端分支名]]
- -f 表示冲突时强制覆盖
- 如果远程分支名和本地分支名称相同,则可以只写本地分支
git push origin master
--set-upstream
推送到远端的同时并且建立起和远端分支的关联关系。
git push --set-upstream origin master
- 如果当前分支已经和远端分支关联,则可以省略分支名和远端名。
git push
将master分支推送到已关联的远端分支。
5.4 本地分支和远程分支的关系
- 查看关联关系我们可以使用
git branch -vv
命令
5.5 从远程仓库克隆
如果已经有一个远程仓库,我们可以直接clone到本地
- 命令:
git clone <仓库路径>[本地目录]
- 本地目录可以省略,会自动生成一个目录
5.6 从远程仓库中抓取和拉取
远程分支和本地的分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。
- 抓取 命令:
git fetch [remote name] [branch name]
- 抓取命令就是将仓库里的更新都抓取到本地,不会进行合并
- 如果不指定远端名称和分支名,则抓取所有分支
- 拉取 命令:
git pull [remote name] [branch name]
- 拉取命令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
- 如果不指定远端名称和分支名,则抓取所有并更新当前分支