目的:1.统一团队的Git工作流 2.统一团队Git Commit日志标准,可通过日志快速了解改动模块
作者:高斌
## 一、Git工作流
* * *
### 1.Git分支创建规范:
`dev`为日常开发分支
`preview`为测试版分支
`master`为主分支,禁止直接在此分支进行代码修改和提交
`feature`新功能开发分支,完成后合并到dev分支进行测试
`fix`线上紧急漏洞修复分支,从master分支拉取创建,修复完bug后合并到dev和master分支(需在dev完成测试后才能合并master分支)
`feature`和`fix`分支可在使用后删除,具体视个人情况而定
### 2.分支使用规范
日常开发在dev分支上进行
有测试环境时,上线前需要先将代码合并到preview分支上进行提测,测试无误后将preview分支合并到master分支进行正式版提交
理论上master分支不能做任何改动,只能合并其他分支。
禁止在master分支上直接修改文件进行提交,很容易与其他分支及团队成员产生冲突,破坏分支之间的关联关系
## 二、Git提交规范
每次提交必须按照规范,写明本次提交的类型(方便快速了解本次改动内容),并对修改内容做出明确描述
* 提交格式
* 提交类型:1.提交描述 2.提交描述2
* 提交类型
* `fix`:问题的修复
* `feat`:有新功能的增加
* `update`:现有功能模块的代码改动
* `improve`:优化某个模块
* `debug`:提交某个功能模块的调试代码
* `refactor`:重构某个模块
~~~
示例:
(单种修改类型) feat: 1.新增xxx功能 2.新增yyy功能
(多种修改类型) feat + update: 1.新增xxx功能 2.更改xx模块样式
~~~
示例:
简明扼要阐述本次改动,达到看提交记录就能明确了解本次改动的程度。
![](https://h5cdn.xiaobaoshiguang.com/Markdown/2022-08-26-WHXFRU.png)
## 三、Git Stash贮藏功能
* * *
使用场景:线上有紧急bug要修复,必须切到master分支上创建fix分支进行修复。但是你目前在dev分支功能开发了一半,又不想将开发一半的代码提交,那么就可以用Git stash 命令把你目前未提交的代码先贮藏起来,等修好bug,从master分支上切回dev分支之后,再把改动从贮藏中恢复到dev分支,然后继续开发。
官方文档:→[链接](https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E8%B4%AE%E8%97%8F%E4%B8%8E%E6%B8%85%E7%90%86)
~~~
git stash save "当前存储的变动描述" : 执行存储时,添加备注 (执行存储后,会把改动文件从当前分支中还原)
git stash list : 查看stash列表
git stash apply : 应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
git stash pop : 恢复之前缓存的stash,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
git stash drop stash@{$num} : 丢弃stash@{$num}存储,从列表中删除这个存储
git stash clear : 删除所有缓存的stash
~~~
**Sourtree快捷使用:**
1.点击顶部贮藏按钮,在弹出框中输入此次贮藏内容概要
2.左侧会已贮藏列表可以进行贮藏应用或删除贮藏代码
![](https://h5cdn.xiaobaoshiguang.com/Markdown/2022-08-26-ggJCcM.png?imageMogr2/thumbnail/1000)
## 四、Git Tag标签功能
* * *
基本所有成体系的项目都会在项目发版时进行标签标记
例如下图:
![](https://h5cdn.xiaobaoshiguang.com/Markdown/2022-08-26-p7nd8U.png?imageMogr2/auto-orient/thumbnail/1200)
* 分支代表的是一条时间轴,汇聚了一系列的提交历史操作,并可进行回溯,而标签标记的是一个时间点,标识了一个特定时刻,类似版本库的一个快照。
* 通过获取某个标签的版本,就可以把当时的历史版本取出来
官方文档:→[链接](https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE)
**Sourtree快捷使用:**
1.在对应的commit上右键点击标签选项,然后输入标签的名称
2.在左侧列表将刚创建的标签推送到远程仓库
![](https://h5cdn.xiaobaoshiguang.com/Markdown/2022-08-26-hvH1AF.png?imageMogr2/thumbnail/1000)
## 五、查看commit合并时间
* * *
在 Git 配置文件 `~/.Gitconfig` 中追加以下别名:
~~~
[alias]
find-merge = "!sh -c 'commit=$0 && branch=${1:-HEAD} && (git rev-list $commit..$branch --ancestry-path | cat -n; git rev-list $commit..$branch --first-parent | cat -n) | sort -k2 -s | uniq -f1 -d | sort -n | tail -1 | cut -f2'"
show-merge = "!sh -c 'merge=$(git find-merge $0 $1) && [ -n \"$merge\" ] && git show $merge'"
~~~
之后就可以下面这样使用了:
~~~
# 当前分支
git find-merge <SHA-1>
# 指定分支
git find-merge <SHA-1> master
~~~
示例:
~~~
on master ◦ git find-merge 0c205019ac75f1fc09a7fdd6079461328abc3137 23:02:37
6cbd92e271de540e98f4157132ba47973e3cb07b(通过这次提交合并进入)
on master ◦ git show-merge 0c205019ac75f1fc09a7fdd6079461328abc3137 23:06:06
commit 6cbd92e271de540e98f4157132ba47973e3cb07b
Merge: 9ab0014 e22126f
Author: 亮 <liang.huang>
Date: Fri Apr 28 21:04:33 2017 +0800
Merge branch '20170413-v4.5.0-share' into '20170428-v5.1.0'
分享页面、首页弹屏、banner修改、push和消息页面跳转
See merge request !125
~~~
## 六、Git常用操作
* * *
### 1.将本地项目添加到远程仓库
~~~
在本地项目中执行以下命令
git init (初始化git项目,已经初始化过的无需执行)
git remote add origin 远程仓库地址
git add . (添加项目所有文件)
git commit -m '项目初始化'
git pull origin master
(pull如果报错可尝试此命令解决 git pull origin master --allow-unrelated-histories)
git push origin master
~~~
### 2.版本回滚
~~~
1.回退到当前版本(放弃所有修改)
git reset --hard
2.撤销某个文件的修改
git checkout demo.js
3.回退到某一版本但保存自该版本起的修改
git reset 版本号
4.回退到和远程版本一样
有时候,当发生错误修改需要放弃全部修改时,可以以远程分支作为回退点退回到与远程分支一样的位置,执行的命令如下
git reset --hard origin/master // origin代表你远程仓库的名字,master代表分支名
5.回退远程仓库的版本
先在本地切换到远程仓库要回退的分支对应的本地分支,然后本地回退至你需要的版本,然后执行:
git push <仓库名> <分支名> -f
6.本地强制与远程仓库同步
git reset --hard origin/分支名
~~~
### 3.解决代码冲突
合并代码后,因多人修改同一模块,可能会产生代码冲突,此时需要手动解决。
~~~
示例:以下是冲突代码提示
<<<<<< HEAD
const demo = 111;
======
const demo = 222;
>>>>>> 865sdf7612b3u23h4234
说明:
<<<<<< HEAD
此区间的代码指,当前分支下你所改动的代码
======
此区间代表你合并代码后,他人改动的代码
>>>>>> 865sdf7612b3u23h4234
需要对比两个区间的代码,根据实际情况修改代码,修改完成后,删除所有冲突标记。
然后执行以下操作:
git add .
git commit -m "fix:解决代码冲突"
git push origin 分支名`
~~~
### 4.查看合并操作记录
你可以使用以下命令来查看Git分支的合并操作记录:
~~~
git reflog show <branch-name>
~~~
这将显示指定分支的所有合并操作记录,包括合并后的提交和回滚操作。如果省略`<branch-name>`参数,则将显示当前分支的所有合并操作记录m 增加`--oneline`可查看简易信息.
### 5.查看分支merge记录
你可以使用以下命令来查看Git分支的合并记录:
~~~
git log --merges <branch-name>
~~~
这将显示指定分支的所有合并记录,包括其它分支合并到该分支的记录。如果省略`<branch-name>`参数,则将显示当前分支的所有合并记录。
### 6.切换仓库远程地址
~~~
# 查看当前远程代码库信息
git remote show origin
# 可将现有代码库切换到其他远程仓库
git remote set-url origin 新仓库地址
~~~