git分支和标签
任务
- 分支管理
- 标签
- Git Flow
1 分支管理策略
1.1 分支管理重要性
- 团队协作
- 维护主分支稳定
- 敏捷开发、快速迭代、持续集成
1.2 git分支原理
Git 分支管理是 Git 强大功能之一,能够让多个开发人员并行工作,开发新功能、修复 bug 或进行实验,而不会影响主代码库。一个分支代表一条独立的开发线。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。Git 分支实际上是指向更改快照的指针。
2 分支管理操作
1)查看本地分支
git branch
[!NOTE]
当执行git init时,git会默认创建master分支
git branch -r: 查看远程分支
git branch -a:查看所有本地和远程分支
2)创建分支
git branch develop(分支名)
3)切换分支
git checkout develop(分支名)
[!NOTE]
*号表示当前分支
4)在新分支下新建文件并提交
touch test_branch111.txt
git status
git add .
git commit -m "add new file test_branch111 by jerry2222"
git status
ls
切换回master分支,验证分支变化:
git checkout master
git status
ls
在列举master分支内容时,不存在test_branch111.txt文件,该文件仅在develop分支下存在。
[!IMPORTANT]
无论当前在哪个分支下,新建文件,但没有commit到指定分支,则在各个分支下都是可见的,只有提交到当前分支下,其他分支才看不到该文件,也就是commit之前的中间状态各分支都可以决定是否提交到该分支。只有commit才最终决定文件归属哪个分支。
5)分支推送
git push origin develop
6)合并分支
git checkout master
git branch
git merge develop
git push origin master
[!CAUTION]
分支合并步骤:
1)首先切换到master分支
2)然后使用merge合并分支到当前分支,在合并过程中如果有冲突需要解决冲突,冲突解决方式和没有分支时一样。merge前一定注意当前分支是哪个分支
3)最后推送master分支
挑选提交:
git cherry-pick
命令允许你选择特定的提交并将其应用到当前分支。git cherry-pick <commit>(提交id)
如果拣选过程中出现冲突,解决冲突后使用
git cherry-pick --continue
继续拣选。
7)删除分支
合并后,如果当前分支已不再需要可以删除分支:
git branch -d develop(删除本地)
git branch (查看本地分支)
git branch -a(查看所有分支,包括本地和远程)
git push origin -d develop(删除远程分支)
[!NOTE]
git branch -D <branchname> 强制删除未合并分支
8)打标签
git tag v1.0(标签名)
git push origin v1.0
[!NOTE]
标签语法:
git tag
如果添加注释需使用-a参数,比如:
git tag -a v1.0
git会打开编辑器让你输入标签注解
给指定提交打标签:
git tag -a v1.0
默认情况下,git push不会推送标签,你需要显示推送标签
git push origin
推送所有标签使用:
git push origin --tags
删除本地标签:
git tag -d
删除远程标签:
git push origin -d
查看标签:
git show
当标签推送到远程后,可以在远程web端(比如gitee)根据标签下载指定阶段的代码:
3 Git Flow
Git Flow 是一种基于 Git 的分支模型,旨在帮助团队更好地管理和发布软件。由 Vincent Driessen 在 2010 年提出,并通过一套标准的分支命名和工作流程,使开发、测试和发布过程更加有序和高效。
Git Flow 主要由以下几类分支组成:master
、develop
、feature
、release
、hotfix
。
3.1 Git Flow分支模型
分支 | 描述 |
---|---|
master | 永远保持稳定和可发布的状态,每次发布一个新的版本时,都会从 develop 分支合并到 master 分支 |
develop | 用于集成所有的开发分支,代表了最新的开发进度,功能分支、发布分支和修复分支都从这里分支出去,最终合并回这里。 |
feature | 用于开发新功能,从 develop 分支创建,开发完成后合并回 develop 分支。命名规范:feature/feature-name |
release | 用于准备新版本的发布,从 develop 分支创建,进行最后的测试和修复,然后合并回 develop 和 master 分支,并打上版本标签,命名规范:release/release-name |
hotfix | 用于修复紧急问题,从 master 分支创建,修复完成后合并回 master 和 develop 分支,并打上版本标签,命名规范:hotfix/hotfix-name |
分支操作原理:
- Master 分支上的每个 Commit 应打上 Tag,Develop 分支基于 Master 创建。
- Feature 分支完成后合并回 Develop 分支,并通常删除该分支。
- Release 分支基于 Develop 创建,用于测试和修复 Bug,发布后合并回 Master 和 Develop,并打 Tag 标记版本号。
- Hotfix 分支基于 Master 创建,完成后合并回 Master 和 Develop,并打 Tag 1。
3.2 Git Flow初始化
Git Flow已经集成到git bash中,通过git flow init可以直接进行初始化。
3.3 优缺点
优点:
- 明确的分支模型:清晰的分支命名和使用规则,使得开发过程井然有序。
- 隔离开发和发布:开发和发布过程分离,减少了开发中的不确定性对发布的影响。
- 版本管理:每次发布和修复都会打上版本标签,方便回溯和管理。
缺点:
- 复杂性:对于小型团队或简单项目,Git Flow 的分支模型可能显得过于复杂。
- 频繁的合并:在大型团队中,频繁的分支合并可能导致合并冲突增加
Git Flow 是一种结构化的分支管理模型,通过定义明确的分支和工作流程,帮助团队更好地管理软件开发和发布过程。虽然它增加了一定的复杂性,但对于大型项目和团队协作,Git Flow 提供了强大的支持和管理能力。