前端架构师的 git 功力,你有几成火候?
大纲预览
分支管理策略 commit 规范与提交验证 误操作的撤回方案 Tag 与生产环境 永久杜绝 443 Timeout hook 实现部署? 终极应用: CI/CD
分支管理策略
Git Flow GitHub Flow GitLab Flow
dev-* develop staging release
dev-*
是一组开发分支的统称,包括个人分支,模块分支,修复分支等,团队开发人员在这组分支上进行开发。merge
合并 develop 分支的最新代码;开发完成后,必须通过 cherry-pick
合并回 develop
分支。develop
是一个单独分支,对应开发环境,保留最新的完整的开发代码。它只接受 cherry-pick
的合并,不允许使用 merge。staging
分支对应测试环境。当 develop 分支有更新并且准备发布测试时,staging 要通过 rebase
合并 develop 分支,然后将最新代码发布到测试服务器,供测试人员测试。release
则表示生产环境。release 分支的最新提交永远与线上生产环境代码保持同步,也就是说,release 分支是随时可发布的。release
分支通过 rebase
合并 staging 分支,然后将最新代码发布到生产服务器。develop -> (merge) -> dev-* dev-* -> (cherry-pick) -> develop develop -> (rebase) -> staging staging -> (rebase) -> release
为什么合并到 develop 必须用 cherry-pick?
dev-*
分支多而杂,直接 merge 到 develop 会产生错综复杂的分叉,难以理清提交进度。为什么合并到 staging/release 必须用 rebase?
commit 规范与提交验证
fix:
,feat:
,用来标记这个 commit 主要做了什么事情。build
:表示构建,发布版本可用这个ci
:更新 CI/CD 等自动化配置chore
:杂项,其他更改docs
:更新文档feat
:常用,表示新增功能fix
:常用:表示修复 bugperf
:性能优化refactor
:重构revert
:代码回滚style
:样式更改test
:单元测试更改
npm install -g commitizen cz-conventional-changelog
~/.czrc
文件,写入如下内容:{ "path": "cz-conventional-changelog" }
git cz
命令来代替 git commit
命令,效果如下:git hook
,也就是 git 钩子。pre-commit
:提交信息前运行,可检查暂存区的代码prepare-commit-msg
:不常用commit-msg
:非常重要,检查提交信息就用这个钩子post-commit
:提交完成后运行
pre-receive
:非常重要,推送前的各种检查都在这post-receive
:不常用update
:不常用
commit-msg
钩子在客户端对 commit 信息做校验。husky + commitlint
误操作的撤回方案
reset
和 revert
git reset
commitId
来恢复版本。因为每次提交都会生成一个 commitId,所以说 reset 可以帮你恢复到历史的任何一个版本。$ git reset [option] [commitId]
$ git reset --hard cc7b5be
git log
命令查看提交记录,可以看到 commitId 值,这个值很长,我们取前 7 位即可。--hard
,其实共有 3 个值,具体含义如下:--hard
:撤销 commit,撤销 add,删除工作区改动代码--mixed
:默认参数。撤销 commit,撤销 add,还原工作区改动代码--soft
:撤销 commit,不撤销 add,还原工作区改动代码
--hard
,使用这个参数恢复会删除工作区代码。也就是说,如果你的项目中有未提交的代码,使用该参数会直接删除掉,不可恢复,慎重啊!$ git reset --soft HEAD^
HEAD^
表示上一个提交,可多次使用。# 1. 回退到上次提交
$ git reset HEAD^
# 2. 修改代码...
...
# 3. 加入暂存
$ git add .
# 4. 重新提交
$ git commit -m 'fix: ***'
$ git commit --amend
git add
,然后再执行这个命令,比上述的流程更快捷更方便。-f
参数,强制推送,这时本地代码会覆盖远程代码。-f
参数非常危险!如果你对 git 原理和命令行不是非常熟悉,切记不要用这个参数。git revert
git revert
-f
参数的问题,提高了安全性。$ git revert -n [commitId]
Tag 与生产环境
v1.2.4
的版本:$ git tag -a v1.2.4 -m "my version 1.2.4"
$ git show v1.2.4
> tag v1.2.4
Tagger: ruims <2218466341@qq.com>
Date: Sun Sep 26 10:24:30 2021 +0800
my version 1.2.4
$ git push origin v1.2.4
git reset
,git revert
命令。$ git revert [pre-tag]
# 若上一个版本是 v1.2.3,则:
$ git revert v1.2.3
永久杜绝 443 Timeout
https
协议,还支持 ssh
协议。于是准备尝试一下使用 ssh 协议克隆代码。$ git clone git@github.com:[organi-name]/[project-name]
hook 实现部署?
终极应用: CI/CD
关注公众号:拾黑(shiheibook)了解更多
赞助链接:
关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/
关注网络尖刀微信公众号
随时掌握互联网精彩
随时掌握互联网精彩
- 澳元兑换人民币汇率2024年1月31日
- 卢布汇率人民币2024年1月5日
- 英镑兑换人民币汇率2023年11月1日
- 【杂谈快报】苹果将降低部分员工奖金发放频率 扩大冻结招聘的范围;芯片出口连跌6个月 韩国仍投资300万亿韩元
- 慢下来&快起来,看Coca-Cola高效转型路径
- 量产渐进式路线成为主流,智能驾驶还是要“步步为营”
- 百度闯入5000亿蓝海
- 工信部:我国5G手机终端连接数已达3.92亿户
- 东芝2020财年盈利1139亿日元;微信将不再提供小程序打开App技术服务|Do早报
- AT&T计划斥资80亿美元部署C波段5G 到2023年初覆盖1亿人
- “变味”的情人节:花市火热、电影遇冷、酒店获利
- 【杂谈快报】三星考虑斥资100亿美元在美建厂,以跟上台积电步伐
赞助链接