✨探索 Git 最佳实践 入门✨
一、Git 基础概念理解
- 仓库(Repository) :可以简单理解为一个项目的文件夹,它里面包含了项目的所有文件以及这些文件的修改历史记录等信息。例如你开发一个网站项目,整个网站相关的代码、配置文件等所在的这个 “管理空间” 就是仓库,本地仓库存在于你的电脑上,而远程仓库一般放在类似 GitHub、GitLab 等代码托管平台上。
- 提交(Commit) :是将你对文件做出的修改记录下来的一个操作,相当于给项目在某个时间点拍了一张 “快照”,记录下当时文件的状态以及你所做的变更描述(通过提交信息体现)。比如你修改了网站项目中某个页面的样式代码,把修改后的代码状态通过提交保存下来,方便后续追溯和管理。
- 分支(Branch) :分支就是在原有代码基础上开辟出来的一条独立的开发线。例如主分支(通常叫 master 或者 main 分支)一般存放稳定可发布的代码,而当你要开发新功能时,可以创建一个新的分支(如 feature - 登录功能分支),在这个分支上进行功能开发,不会影响主分支的代码,等功能开发完成并测试通过后再合并到主分支上。
二、团队协作中的 Git 最佳实践
(一)分支策略
- 功能分支工作流:
-
- 对于大多数团队开发场景很适用。开发人员接到一个新功能开发任务时,基于主分支创建对应的功能分支(命名可以规范些,像前面提到的 feature - 功能名称的格式)。
- 在功能分支上进行代码编写、调试等工作,期间可以频繁地提交代码,每次提交都写清楚简短且有意义的提交说明(比如 “优化登录页面的表单验证逻辑”)。
- 当功能开发完成并且自测通过后,发起合并请求(Merge Request,不同平台叫法可能略有不同,像 GitHub 叫 Pull Request)将功能分支合并到主分支或者开发分支(如果有开发分支的话,开发分支最终也会合并到主分支用于发布)。在合并前,一般需要其他团队成员进行代码审查(Code Review),确保代码质量、符合项目规范等。
- Git Flow 工作流(较复杂但功能强大) :
-
- 定义了多个不同用途的分支,如 master 分支用于存放正式发布的版本;develop 分支用于整合各个功能分支的代码,是日常开发的 “集成分支”;feature 分支用于开发新功能;release 分支用于准备发布新版本,会在这个分支上进行最后的测试、修复小 bug、更新版本号等操作;hotfix 分支用于紧急修复线上出现的严重问题,修复完后要同时合并到 master 和 develop 分支。
- 例如,当要开发一个新功能时,从 develop 分支创建 feature 分支进行开发,开发完成后合并回 develop 分支。当准备发布新版本时,从 develop 分支创建 release 分支,测试没问题后将 release 分支分别合并到 master(打上对应的版本标签)和 develop 分支。如果线上出现紧急 bug,从 master 分支创建 hotfix 分支进行修复,然后再按要求合并。
(二)代码审查
- 重要性:通过团队成员互相审查代码,可以发现潜在的逻辑错误、不符合编码规范的地方、安全漏洞等问题,提升代码整体质量,也有助于知识共享,让不同成员了解其他人写的代码思路。
- 实践方式:
-
- 在发起合并请求时,附上清晰的功能说明、修改了哪些文件以及这些修改的大致思路等信息,方便审查人员理解。
- 审查人员可以从代码逻辑是否正确、变量命名是否清晰合理、是否遵循团队既定的编码风格(比如缩进、括号换行等格式要求)、有没有做好必要的注释等多方面进行审查。对于发现的问题,及时在合并请求的评论区反馈给提交代码的成员,对方修改后可以再次提交审查,直到代码符合要求后才进行合并。
(三)冲突解决
- 产生原因:当不同分支对同一个文件的同一部分做了不同修改,在合并这些分支时就容易产生冲突。比如主分支上某段代码是用于显示用户登录后的欢迎语 “欢迎回来,用户 A”,而在功能分支上你把它改成了 “欢迎,尊贵的用户”,合并这两个分支时 Git 就不知道该用哪段代码了,就会提示冲突。
- 解决方法:
-
- Git 会在冲突的文件中标记出冲突的部分,通常用类似 “<<<<<<<HEAD”(表示当前分支的代码)、“=======”(分隔线)、“>>>>>>> 要合并进来的分支名称”(表示要合并进来分支的代码)这样的标记来显示冲突内容。
- 开发人员需要手动编辑这个文件,根据实际需求选择保留哪些代码或者进行新的修改,让代码符合期望的逻辑,然后再将修改后的文件重新提交(一般是先添加到暂存区,再提交),完成冲突的解决以及合并操作。
(四)定期同步远程仓库
- 好处:避免本地仓库与远程仓库代码差异过大,导致后续合并等操作出现过多复杂的问题,也方便团队成员之间随时获取其他人最新的代码进展情况。
- 操作方式:
-
- 可以使用
git pull
命令(如果是从远程仓库拉取并合并到当前本地分支),例如你所在团队的小伙伴在远程仓库的主分支更新了一些通用的配置文件代码,你通过git pull origin master
(假设远程仓库叫 origin,要拉取的分支是 master 分支)就可以将这些更新同步到你本地的 master 分支上了。 - 也可以先使用
git fetch
命令将远程仓库的更新信息拉取到本地(但不自动合并),然后查看更新情况后再决定如何合并,这种方式相对更灵活一些,适合在一些复杂场景下确认更新内容后再谨慎合并。
- 可以使用
三、版本控制中的 Git 最佳实践
(一)使用标签(Tag)标记重要版本
- 意义:方便明确各个重要版本的代码状态,比如项目正式发布了 1.0 版本、2.0 版本等,通过给对应版本的代码打标签,可以快速回到那个版本查看代码或者基于那个版本进行一些修复、二次开发等操作。
- 操作示例:当项目在主分支上完成了 1.0 版本的所有开发并且经过测试准备发布时,可以使用
git tag -a v1.0 -m "项目 1.0 版本发布,包含了基础功能模块"
命令来打标签(这里的-a
表示创建带注释的标签,-m
后面跟着标签的注释说明,v1.0
就是标签名称,你可以根据实际项目的版本命名规则来定),之后如果想查看 1.0 版本代码,使用git checkout v1.0
即可切换到这个版本对应的代码状态(注意处于这个状态下做修改等操作要谨慎,一般是查看为主,若要修改建议基于这个版本新建分支来操作)。
(二)合理使用.gitignore 文件
- 作用:用于指定哪些文件或者文件夹不需要被 Git 管理,比如项目中的编译生成的临时文件、本地开发环境配置中涉及的一些敏感信息文件(像数据库连接密码配置文件,通常在本地开发环境有,但是不应该被提交到远程仓库共享)等。
- 编写示例:如果你的项目是 Python 项目,在项目根目录下创建
.gitignore
文件,里面可以写上像*.pyc
(表示忽略所有的 Python 编译后的字节码文件)、venv/
(表示忽略虚拟环境文件夹,因为每个开发人员本地的虚拟环境配置可能不同,没必要提交到仓库)等内容,每行写一个要忽略的文件或者文件夹路径模式,这样 Git 在管理项目文件时就会自动跳过这些指定的内容。
(三)备份与恢复策略
- 本地仓库备份:可以定期将本地的 Git 仓库(整个项目文件夹)复制到外部存储设备(如移动硬盘)或者备份到云端存储服务中,以防本地电脑出现硬盘损坏等意外情况导致代码丢失。
- 远程仓库恢复:如果远程仓库出现数据丢失或者被误操作等问题,一些代码托管平台(如 GitHub、GitLab 等)有对应的备份和恢复功能,也可以通过本地仓库中完整保存的代码以及提交历史记录等信息重新推送到远程仓库来进行恢复(不过需要有对应的权限和谨慎操作,避免覆盖掉其他正确的内容)。
觉得有用的话可以点点赞 (*/ω\*),支持一下。
如果愿意的话关注一下。会对你有更多的帮助。
每天都会不定时更新哦 >人< 。