[学习笔记] Git+Github版本控制(五)
本文章为Git+Github版本控制的学习笔记,学习参考为GeekHour发布的Git教程视频。 视频地址:【GeekHour】一小时Git教程
一、分支
分支介绍
Git当中的分支(Branch)是指在版本控制当中创造一个独立的开发线,每个分支都是仓库的一个快照,可以在这个快照上进行修改,而不影响到主分支。Git的分支允许开发者在同一个项目的不同部分同时工作。
Git分支有以下作用:
并行开发:不同开发者可以在各自的分支上独立工作,互不干扰。
新功能开发:新功能通常在新分支上进行开发,完成后再合并回主分支,保持主分支的稳定性。
版本管理:可以同时维护多个版本的代码,比如一个稳定的生产版本和一个开发中的版本。
代码审查:通过合并请求(Merge Request)进行代码审查,确保代码质量。
实验与迭代:可以在分支上进行试验,失败不会影响主分支的稳定性。
回退与修复:如果出现问题,可以轻松切换回之前的稳定版本或删除有问题的分支。
分支操作
使用git branch <分支名>来创建一个新的分支:
使用git checkout <分支名>来切换分支:
使用
git checkout
也有恢复文件的功能:
使用
git checkout -- <file-path>
可以恢复某个文件到最后一次提交的状态。但是由于文件名可能和分支名产生冲突,所以Git给我们提供了新的切换分支的指令,即
git switch
。
git checkout
恢复文件或分支:
恢复文件到最后一次提交的状态:
git checkout -- <file-path>
。恢复到特定提交:
git checkout <commit-hash>
。
使用git switch <分支名>来切换分支:
git switch -c <分支名>
:新建并切换到分支。git branch -D <分支名>
:强制删除分支。git branch -d <分支名>
:删除分支(只会删除已经合并的分支)。
使用git merge合并分支
若要将合并分支合并到目标分支,则在目标分支下执行:git merge <合并分支>
。
合并分支也可以使用Rebase操作。
分支命名规范
功能分支(Feature Branch)
前缀:
feat/
示例:
feat/user-authentication
说明:用于开发新功能。
修复分支(Bugfix Branch)
前缀:
fix/
示例:
fix/login-issue
说明:用于修复bug。
任务分支(Task Branch)
前缀:
task/
示例:
task/ui-improvements
说明:用于执行特定的任务或开发小的功能。
优化分支(Improvement Branch)
前缀:
improvement/
示例:
improvement/performance-boost
说明:用于对现有功能进行改进。
发布分支(Release Branch)
前缀:
release/
示例:
release/v1.0.0
说明:用于准备发布的代码,可以做最终的测试和修复。
热修复分支(Hotfix Branch)
前缀:
hotfix/
示例:
hotfix/security-vulnerability
说明:用于快速修复紧急问题,通常是直接从主分支创建。
实验分支(Experimental Branch)
前缀:
experiment/
示例:
experiment/new-ui-concept
说明:用于尝试新想法或技术,非正式开发。
命名规范的其他建议:
使用小写字母:分支名称通常使用小写字母,多个单词使用连字符(
-
)分隔。保持简短:分支名称应简短明了,能清晰表达分支的目的。
添加编号*:如果使用任务管理工具,可以在分支名称中添加相关任务的编号,例如:
feat/123-user-authentication
。
二、解决合并冲突
在两个分支中,如果修改了同一个文件的同一行代码,合并分支的时候就会出现合并冲突.
例如在main分支下hello.txt
文件内容如下(已经提交到本地仓库):
This is main txt.
在branchtest2分支下hello.txt
文件内容如下(已经提交到本地仓库):
This is branchtest2 txt.
此时使用git merge
进行合并时报错:
使用git status
和git diff
查看:
在我们进行手动修改文件内容为“This is main txt, merged with branchtest2.”后,重新提交并合并,即可解决冲突:
三、工作流
常见的项目工作流有gitflow和githubflow。 具体详解见:git分支策略(github-flow VS git flow,如何选择)_github flow-CSDN博客