这是我参与「第六届青训营 - 后端场」笔记创作活动的的最后一篇笔记和第二篇实践文章,选题是Git 的正确使用姿势与最佳实践。
暑假因为又实习又刷leetcode,我和我队友最后就剩下两个人坚持着这门课了,用docker搭配环境之后,把image share了给队友,但是最后就我和另一个队友两个人一起写代码,剩下六个队友因为太忙放弃了🫠。我写到代码一半的时候实在是又忙又拉不到人,最能看看是否能用8篇文章去满足条件4。Github可以我的提交记录,等我忙完这阵子面试就继续写吧,这门课挺好的。
Git 是一个分布式版本控制系统,用于跟踪在文件中的更改。下面是一些 Git 的正确使用姿势和最佳实践。
分支管理
Master 和 Develop 分支
通常,主分支(master或main)应保持可部署的状态。开发分支(通常命名为develop)是用于日常开发的地方。
bashCopy code
# 创建并切换到 develop 分支
git checkout -b develop
功能分支
对于每一个新功能或修复,创建一个新的分支。
bashCopy code
# 创建并切换到一个新的功能分支
git checkout -b feature/new-feature
完成后,将功能分支合并回develop。
bashCopy code
# 合并功能分支
git checkout develop
git merge feature/new-feature
提交信息
每次提交都应该有一个有意义的提交信息。这不仅有助于其他开发人员了解你所做的更改,也有助于代码审查。
bashCopy code
# 好的提交信息示例
git commit -m "Add login feature"
代码合并
使用git rebase而不是git merge来更新你的功能分支。这会创建一个更简洁、更直观的提交历史。
bashCopy code
# 更新功能分支
git checkout feature/new-feature
git rebase develop
解决冲突
在解决合并冲突后,使用git add将解决冲突的文件标记为已解决状态。
bashCopy code
# 标记解决冲突的文件
git add resolved-file.txt
历史记录
使用git log和git blame来查看文件的修改历史和了解谁做了哪些更改。
bashCopy code
# 查看提交历史
git log
# 查看文件的行级别历史
git blame file.txt
代码审查
在合并到主分支之前,代码应该经过代码审查。使用git pull request或类似的工具来完成这个任务。
我一般都是在git上操作。
Conventional Commits
我一般用Conventional Commits提交代码。
标准的 Conventional Commit 信息格式如下:
phpCopy code
<类型>(<范围>): <描述>
<类型>:表示更改的原因。这可以是feat(表示新功能)、fix(表示修复 bug)、chore(表示常规任务)、docs(表示文档更新)、style(表示代码风格更改)、refactor(表示代码重构)、test(表示添加或修改测试)等。<范围>:提交更改涉及的代码范围。这通常是代码库中受到更改的模块、函数或文件的名称。<描述>:简短地描述此次提交做了什么。
比如:
feat(auth): 实现 OAuth2fix(button): 修正按钮间距chore(tests): 添加登录测试docs(readme): 添加项目设置步骤
通过使用这种标准,团队成员可以更容易地理解每个提交的目的,而自动化工具(如生成更新日志、版本发布等)也可以更方便地解析提交历史。
同时,也可以用github ci做checking,可以增加对unit test coverage和代码质量检查。
Git 分支管理策略
我曾经用过Git Flow。Git Flow是一种 Git 分支管理策略,由 Vincent Driessen 于 2010 年提出。这种策略适用于有多人协作和需要多版本并行维护的项目,提供了一组明确的规则和操作指南,以便更有效地进行版本管理和发布。
主要分支:
- Master 分支(或 Main 分支) :这个分支保存了所有已发布(或即将发布)版本的代码。它应该始终保持“可部署”的状态。
- Develop 分支:这是日常开发活动的主要分支。当一个新功能开发完成时,它会被合并回这个分支。
辅助分支:
- Feature 分支:从
develop分支分出,用于开发新功能。完成后,再合并回develop分支。 - Release 分支:从
develop分支分出,用于即将发布的版本的准备工作,如 bug 修复和文档编写。完成后,合并回master和develop分支。 - Hotfix 分支:从
master分支分出,用于快速修复生产环境中的严重 bug。完成后,合并回master和develop分支。
# 初始化 Git Flow
git flow init
# 创建一个新的 Feature 分支
git flow feature start NEW_FEATURE
# 完成 Feature 开发
git flow feature finish NEW_FEATURE
# 开始一个 Release 分支
git flow release start VERSION
# 完成一个 Release
git flow release finish VERSION
# 创建一个 Hotfix 分支
git flow hotfix start VERSION
# 完成 Hotfix
git flow hotfix finish VERSION