GIT 分布式版本控制工具
目标
- 了解 Git 基本概念
- 能够概述 Git 工作流程
- 能够使用 Git 命令
- 熟悉 Git 代码托管服务
- 能够使用 IDE 操作 Git
概述
开发中的实际场景
- 备份
- 代码还原
- 系统开发
- 追溯问题
版本控制的方式
集中式
中央服务器, 下载
例子: SVN 、CVS
分布式
没有中央服务器,每个仓库都是一个完整的版本 推送/拉去
例子:GIT
SVN
GIT
GIT工作流程图
clone
(克隆)checkout
(检出)add
(添加)commit
(提交)pull
(拉取): 从远程库拉取到本地库,自动进行合并(merge
),然后放到工作区,相当于fetch
+merge
push
(推送)
Git安装与常用命令
Git安装
下载与安装
基本配置
配置全局用户名和邮箱
提交时的邮箱和地址,在日志中展示,明确提交者的信息
命令:
git config -g user.name="用户名"
git config -g user.email="邮箱地址"
为常用指令配置别名(可选)
用户目录下的
.gitconfig
文件增加如下格式内容:[alias] 别名 = 原操作 # 例如 要为 git log --oneline 设置 别名 lg1 lg = log --oneline
基础操作指令
查看提交日志
命令 : git log [option]
options:
--all
显示所有分支--pretty=oneline
提交信息一行显示--abbrev-commit
输出信息更简短
--graph
已图的形式显示
版本回退
命令:
git reset --hard <提交hash值>
可通过
git reflog
查看所有的操作记录
分支
查看本地分支
命令:
git branch
创建本地分支
命令:
git branch <分支名>
切换分支
命令:
git checkout <已存在的分支名>
根据当前创建一个新分支,并切换到新分支
git checkout -b <新分支名>
合并分支
一个分支上的提交可以合并到另一个分支
命令:
git merge <需合并到当前分支的分支名>
删除分支
不能删除当前分支,只能删除其他分支
删除分支时,需要做各种检查
git branch -d <其他分支名>
git branch -D <分支名称> # 此方式 不做任何检查,强制删除
解决冲突
当两个分支上对文件的修改可能会存在冲突,例如,同时修改了文件的同一行,这时就需要手动解决冲突,步骤如下:
- 处理文件中冲突的地方
- 将解决完冲突的文件加入暂存区(add)
- 提交到仓库(commit)
开发中分支使用原则与流程
在开发中,一般有如下分支使用原则与流程(非绝对):
master
(生产)分支线上分支,主分支
develop
(开发)分支从 master 创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期要求,都可以在此版本进行开发,开发完成后,需要合并到 master 分支,准备上线
feature/xxx
分支从 develop 创建的分支,一般是同期并行开发,但不同期上线创建的分支,分支上的研发任务完成后,合并到 develop 分支
hotfix/xxx
分支从 master 派生的分支,一般作为线上bug修复使用,修复完成需要合并到 master 、test、develop 分支
其他分支,如:
test
分支(用于测试)pre
(预上线分支)- …
Git远程仓库
常用的托管服务【远程仓库】
操作
添加远程仓库
命令:
git remote add <远端名称> <仓库地址>
- 远端名称,默认是
origin
,取决于远端服务器设置- 仓库地址, 从远端服务器获取到的URL
查看远程仓库
命令:
git remote
推送到远程仓库
命令:
git push [-f] [-set-upstream] [远端名称[本地分支名][:远端分支名]]
如果远程分支名和本地分支名相同,可以只写本地分支
git push origin master
--set-upstream
推送到远端的同时并且建立起和远端分支的关联关系git push --set-upstream origin master
如果当前分支已经和远端分支关联,则可以省略分支名和远端分支名
git push
-f
强制覆盖
本地分支与远程分支的关联关系
git branch -vv
从远程仓库克隆
git clone <仓库路径> [本地目录]
- 本地目录 可以省略,会自动生成一个目录
从远程仓库中抓取和拉取
抓取(fetch)
git fetch [远程名][分支名]
- 抓取命令就是将远程仓库中的更新都抓取到本地,不进行合并
- 如果不指定远端名和分支名, 则抓取所有分支
拉取(pull)
git pull [远程名称][分支名]
拉取命令就是将远程仓库的修改拉到本地并自动进行合并,等同于
fetch + merge
如果不指定远端名和分支名,则抓取所有并更新当前分支
解决合并冲突
如果推送到远程有冲突时,需要先拉取最新的远程仓库,经过合并后才能推送到远端分支
Note: 远程分支也是分支,合并时冲突的解决方式和解决本地冲突的方式相同