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

随时掌握互联网精彩
- HuggingFace推出iOS应用 无需联网即可使用本地视觉模型描述用户周围的内容
- 韩元汇率对人民币2024年6月3日
- 英镑兑换人民币汇率2024年2月27日
- 中国广电CBNET与三大运营商对等直连、互联互通
- 英镑兑换人民币汇率2023年11月13日
- 拼多多跨境电商业务将正式登陆澳洲,持续助力中国制造业开拓全球市场
- JavaScript 未必是最优选,下一代浏览器语言会是什么样?
- 教学转型!看微软商用 Surface 如何成为网课新宠
- 如何通俗地理解「分布式系统」;Vue 是否可以在一个项目中使用多个 UI 框架;大厂上线流程:先上前端还是后端|极客观点
- 中国应对全球产业链重构的破局之策
- 外链解禁之后,互联网强权时代走向终结
- 突击股东锁定3年,对资本市场有何影响?
赞助链接