前端架构师的 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/

随时掌握互联网精彩
- u盘格式化后数据能恢复吗?
- 量子计算机将对网络安全构成重大威胁
- 德国计划禁止运营商在5G网络中使用华为、中兴一些组件
- 国补没了,销量跌了,新能源车企靠什么赢?
- 人人视频又摊上事了!遭网飞、索尼等知名大厂集体诉讼
- 市场下行细分需求凸显,安谋科技自研IP助力产业突围
- 三地上市,蔚来真缺钱?
- 微软:.NET 5.0 将于 2022 年 5 月 8 日终止支持
- 【有奖提问】向贾扬清(阿里巴巴副总裁、Caffe作者、TensorFlow作者之一、ONNX创始人)提问啦!
- 【杂谈快报】商汤:强烈反对美国财政部将商汤加入“中国军工复合体企业”清单
- 【大公司创新情报】腾讯视频宣布VIP会员4月10日起涨价
- 单手飙车时速到255公里司机落网
赞助链接