惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Cisco Talos Blog
Cisco Talos Blog
P
Privacy & Cybersecurity Law Blog
I
Intezer
Y
Y Combinator Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
N
Netflix TechBlog - Medium
The Hacker News
The Hacker News
AWS News Blog
AWS News Blog
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Stack Overflow Blog
Stack Overflow Blog
Hacker News: Ask HN
Hacker News: Ask HN
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
B
Blog
T
Tor Project blog
C
Cybersecurity and Infrastructure Security Agency CISA
云风的 BLOG
云风的 BLOG
博客园_首页
V2EX - 技术
V2EX - 技术
T
Threat Research - Cisco Blogs
腾讯CDC
宝玉的分享
宝玉的分享
博客园 - 叶小钗
罗磊的独立博客
S
Securelist
The Last Watchdog
The Last Watchdog
Google Online Security Blog
Google Online Security Blog
Scott Helme
Scott Helme
博客园 - 司徒正美
W
WeLiveSecurity
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Secure Thoughts
NISL@THU
NISL@THU
N
News and Events Feed by Topic
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
K
Kaspersky official blog
IT之家
IT之家

qlAD 的技术笔记

2026 年 6 月 7 日 -- 我有社交恐惧症,恐惧外面到处雷电风雨声(大学生活记录) 手把手带你实现哈希表(C/C++ 数据结构) 手把手带你实现图结构(C/C++ 数据结构) 手把手带你实现二叉树(C/C++ 数据结构) 手把手带你实现栈和队列(C/C++ 数据结构) 手把手带你实现单/双链表(C/C++ 数据结构) 手把手带你实现动态数组(C/C++ 数据结构) 2026 年 1 月 2 日 -- 我不怕冷,因为我内心炽热 【2025 年度总结】(大学生活记录) 2025 年 12 月 2 日 -- 省电模式:大一 100 天耗电日志(大学生活记录) 蓝桥杯备赛第一期 —— 枚举与模拟 2025 年 11 月 3 日 -- 用爱发电、大爱无私(大学生活记录) 使用循环嵌套输出规则图形找规律讲解(嵌套循环-图形输出) 2025 年 10 月 1 日 -- 二字开头第一年的生日记录及感悟随笔(大学生活记录) Python 初级 04 -- 目前为止 Python 中你们做题可能会遇到的问题以及七七八八 2025 年 9 月 24 日 -- 开学后的第一课及军训汇演(大学生活记录) Python 初级 03 -- 程序设计的三种结构之选择结构和循环结构 Python 初级 02 -- 基础的数据类型和输入输出 2025 年 9 月 17 日 -- 大连 2025 国际大体联足球世界杯(大学生活记录) Python 初级 01 -- 初识编程、理解计算机语言及程序运行方式 适合大一新生学习编程的前一课 -- 编程先导(编程的本质) 2025 年 9 月 12 日 -- 三天军训感受以及一些七七八八(大学生活记录) 2025 年 9 月 9 日 -- 体检、军训前的准备(大学生活记录) 适合大一新生的计算机基础知识 -- 个人认为足够版 2025 年 9 月 7 日 -- 既来之、则安之(大学生活记录) C++ 程序的内存布局 —— 代码区、全局/静态区、栈区和堆区 联想小新 pro 16 2025 开箱记录:跳过联网、office 激活、更换 win 11 专业版 R 语言中的数学函数 计算机软件著作权申请过程记录 从聚类到回归:用 Python 解析鸢尾花数据集的完整数据科学流程 条件概率、全概率与贝叶斯公式 —— 一篇文章带你死磕概率公式 高中化学物质反应规则表 —— 方程式之间也有规律可循 集合元素性质、关系、子集公式、基本运算 —— 一篇文章带你全方面死磕集合 如何为你的项目选择合适的许可证 -- 全方位指南 解释 3:1 和 9:3:3:1 的详细来源 —— 建立减数分裂与孟德尔遗传学定律之间的联系 重新设置磁盘分区以及 Btrfs 子卷(subvolume)布局的无损方案 零基础实战:用 Docker 启动 dockermailserver 绕过 25 端口封锁搭建个人邮箱服务器 基于 GitHub Actions + OSS 的自托管 APT 仓库全面指南 如何在安装 Debian 时配置 Btrfs 子卷 | 详细分步指南 一个合格的个人网站站长应该知道哪些事? CSS 基础入门教程 —— 选择器、样式声明 HTML 基础入门 —— 基本结构和语法 给博客添加一个文章数据统计的页面 Git 学习笔记(命令备忘表) Anki 牌组选项详细解释与设置 手动编译带有 KernelSU 的 OnePlus 6 内核 安卓类原生系统补全计划 —— PixelExperience(一加 OnePlus) 如何使用 use-sound 为 React 应用添加声音效果 如何搭建设计自己的博客网站? 使用安知鱼主题同款的 Twikoo 评论组件 配置 GitHub Actions 实现自动化提交百度收录 第00期 | 环境搭建 & 递归 (一) | 基本数列递归 逐字符讲解 C 语言 HelloWorld 程序 2023 年回顾 🤟 Anki:记忆神器,助你高效学习 Gentoo 学习笔记 美化你的 PixelExperience OS Markdown 语法指南 搭建 OneDrive 目录索引 为什么用 65 表示大写字母 A
标准化项目的 GitHub Flow 工作流
qlAD · 2024-11-07 · via qlAD 的技术笔记

cover

当你使用版本控制系统 Git 的时候可能会将代码托管到 Github 等平台。为了方便多人协作,不让你的版本树乱七八糟,保证你的代码可以随时部署,更加规范化你的项目,通常都会使用一种 workflow

而 GitHub Flow 是一种简单而高效的工作流程,主要依赖于 GitHub 上的 pull request 和分支机制来管理代码变更。Github 文档

Github Flow


二、GitHub Flow 的核心步骤

GitHub Flow 的核心步骤非常简洁,通常包括以下几个步骤:

  • 创建新分支(Create a branch);
  • 在新分支上完成开发并提交(Add commits);
  • 提交 Pull Request(Open a Pull Request);
  • 等待讨论审查(Discuss and review your code);
  • 部署发布(Deploy);
  • 完成合并(Merge);

1、从 main 分支创建新的功能分支

在开始一个新的功能或修复一个 bug 时,从 main 分支创建一个独立的分支,不要直接修改 main 分支上的代码。

本地分支

这样保证主分支始终可部署,意味着你打算开发的部分都应该在自己的分支中工作,然后在它们准备好时重新合并到主分支中。

命名通常为 feature/功能名称fix/bug描述,例如 feature/add-user-auth,这样能够方便大家了解分支的用途。

# 当前处在默认分支
git checkout main
git pull origin main
git checkout -b feature/add-user-auth

2、在独立分支中进行开发

在新的分支上进行开发,不会影响主分支的稳定性。期间可以自由提交和推送代码,也可以根据需要与团队成员协作。

推送分支

当你完成了这个功能的开发,你可以使用 git push 推送你的分支

# 当前处在独立分支 'feature/add-user-auth'
git add .
git commit -m "feat:Add user authentication feature"
git push origin feature/add-user-auth

注意:提交日志的编写规范建议

常见的类型包括:

类型描述举例
feat添加功能feat: Add user authentication feature
fix修复问题fix: Resolve issue where login button was not clickable
docs更新文档docs: Update README with setup instructions
style改进样式style: Fix indentation and remove trailing spaces in app.js
refactor重构代码refactor: Simplify user authentication logic
perf性能优化perf: Improve image loading speed by using lazy loading
test修改测试test: Add unit tests for the authentication service
chore杂项任务chore: Update Node.js version in package.json

3、提交 Pull Request(PR)

提交 PR

当完成功能或 bug 修复后,向 main 分支发起 Pull Request。这个步骤是 GitHub Flow 的核心部分。在 PR 中,团队成员可以对代码进行审查,确保代码符合质量和项目规范,并且通过自动化测试来检查代码是否存在潜在问题。

提交 PR

在 PR 的标题和描述中,建议简要描述所实现的功能或修复的内容,并链接到相关的任务或 issue。

PR 描述

4、进行代码审查和测试

审查代码是团队合作中必不可少的一环。在 PR 提交之后,团队成员应检查代码是否符合编码规范、逻辑是否正确,并确认没有产生新的问题。

代码审查

  • 代码审查:通过团队成员之间的反馈,提升代码质量。
  • 自动化测试:在 PR 合并前确保代码经过充分测试。

5、提前触发部署

部署

在合并 PR 之前,代码可能已经部署到一个临时的 staging 环境或测试环境。通过这种方式,开发者可以确保代码在合并之前在一个接近生产的环境中运行,以发现潜在的问题。

CI 工具

https://github.com/marketplace?type=apps&category=continuous-integration

6、合并代码到 main 分支

通过代码审查和测试后,即可将 PR 合并到 main 分支。合并的操作可以在 GitHub 上直接完成,也可以通过命令行执行。

代码合并

  • 在 GitHub 上点击 "Merge Pull Request" 按钮。

Merge Pull Request

为了保证 main 上的 commit 足够简洁,这里选择 Squash and merge,可以将功能分支上的提交合并成一次提交。

Squash and merge

合并完成之后,可以删除刚才的功能分支。

  • 或使用命令行合并:
git checkout main
git merge feature/your-feature-name
git push origin main

三、提交日志的编写规范建议

1、遵循约定的提交信息格式

一个规范的提交日志应该包括三个主要部分:标题正文页脚。以下是一个常见的结构:

<类型>: <简要描述>

<详细说明>

<关联的 issue 或任务 ID>

示例:

feat: Add user authentication module

Implemented a new authentication system using JWT to allow users to log in
and register. This feature is crucial for securing user data and is part of
the sprint 3 goals.

Fixes #123 (login page issue)

更多标题示例见上文

2、避免模糊或无意义的提交信息

提交日志应该避免使用过于模糊或者无意义的描述,这会增加项目管理的困难。以下是一些不建议使用的示例:

原始日志内容规范化后的提交日志
update coderefactor: update core components for optimization
fixed some bugsfix: resolve issue with user authentication flow
working on new featurefeat: implement user profile management feature
misc changeschore: update dependencies and improve code comments

这类提交信息缺乏具体性,无法清楚表明做了什么变更,也不容易让其他开发人员理解你所做的工作。

3、避免一次提交过多内容

每次提交应该尽量聚焦于单一目标,避免把多个不相关的变更混在一起。通过将提交粒度控制在合适范围,可以使得后期的回溯和问题定位更加清晰。

这种提交同时涉及多个功能或问题,回溯时很难判断哪个部分引入了问题。应该分开为多个小的提交:

fix: fix login issue, update readme, refactor header component

fix: fix login issue
docs: update readme for new login feature
refactor: refactor header component