本文章为Git+Github版本控制的学习笔记,学习参考为GeekHour发布的Git教程视频。 视频地址:【GeekHour】一小时Git教程

一、分支

分支介绍

Git当中的分支(Branch)是指在版本控制当中创造一个独立的开发线,每个分支都是仓库的一个快照,可以在这个快照上进行修改,而不影响到主分支。Git的分支允许开发者在同一个项目的不同部分同时工作。

Git分支有以下作用:

  • 并行开发:不同开发者可以在各自的分支上独立工作,互不干扰。

  • 新功能开发:新功能通常在新分支上进行开发,完成后再合并回主分支,保持主分支的稳定性。

  • 版本管理:可以同时维护多个版本的代码,比如一个稳定的生产版本和一个开发中的版本。

  • 代码审查:通过合并请求(Merge Request)进行代码审查,确保代码质量。

  • 实验与迭代:可以在分支上进行试验,失败不会影响主分支的稳定性。

  • 回退与修复:如果出现问题,可以轻松切换回之前的稳定版本或删除有问题的分支。

分支操作

使用git branch <分支名>来创建一个新的分支:

image-20240910145706235

使用git checkout <分支名>来切换分支:

image-20240910145824815

使用git checkout也有恢复文件的功能:

  • 使用 git checkout -- <file-path> 可以恢复某个文件到最后一次提交的状态。

但是由于文件名可能和分支名产生冲突,所以Git给我们提供了新的切换分支的指令,即git switch

git checkout恢复文件或分支:

  • 恢复文件到最后一次提交的状态:git checkout -- <file-path>

  • 恢复到特定提交:git checkout <commit-hash>

使用git switch <分支名>来切换分支:

image-20240910150936286

  • git switch -c <分支名>:新建并切换到分支。

  • git branch -D <分支名>:强制删除分支。

  • git branch -d <分支名>:删除分支(只会删除已经合并的分支)。

使用git merge合并分支

若要将合并分支合并到目标分支,则在目标分支下执行:git merge <合并分支>

image-20240910160221107

合并分支也可以使用Rebase操作。

分支命名规范

  1. 功能分支(Feature Branch)

    • 前缀feat/

    • 示例feat/user-authentication

    • 说明:用于开发新功能。

  1. 修复分支(Bugfix Branch)

    • 前缀fix/

    • 示例fix/login-issue

    • 说明:用于修复bug。

  1. 任务分支(Task Branch)

    • 前缀task/

    • 示例task/ui-improvements

    • 说明:用于执行特定的任务或开发小的功能。

  1. 优化分支(Improvement Branch)

    • 前缀improvement/

    • 示例improvement/performance-boost

    • 说明:用于对现有功能进行改进。

  1. 发布分支(Release Branch)

    • 前缀release/

    • 示例release/v1.0.0

    • 说明:用于准备发布的代码,可以做最终的测试和修复。

  1. 热修复分支(Hotfix Branch)

    • 前缀hotfix/

    • 示例hotfix/security-vulnerability

    • 说明:用于快速修复紧急问题,通常是直接从主分支创建。

  1. 实验分支(Experimental Branch)

    • 前缀experiment/

    • 示例experiment/new-ui-concept

    • 说明:用于尝试新想法或技术,非正式开发。

  1. 命名规范的其他建议:

    • 使用小写字母:分支名称通常使用小写字母,多个单词使用连字符(-)分隔。

    • 保持简短:分支名称应简短明了,能清晰表达分支的目的。

    • 添加编号*:如果使用任务管理工具,可以在分支名称中添加相关任务的编号,例如:feat/123-user-authentication

二、解决合并冲突

在两个分支中,如果修改了同一个文件的同一行代码,合并分支的时候就会出现合并冲突.

例如在main分支下hello.txt文件内容如下(已经提交到本地仓库):

This is main txt.

branchtest2分支下hello.txt文件内容如下(已经提交到本地仓库):

This is branchtest2 txt.

此时使用git merge进行合并时报错:

image-20240910162455787

使用git statusgit diff查看:

image-20240910162558101

在我们进行手动修改文件内容为“This is main txt, merged with branchtest2.”后,重新提交并合并,即可解决冲突:

image-20240910162928900

三、工作流

常见的项目工作流有gitflowgithubflow。 具体详解见:git分支策略(github-flow VS git flow,如何选择)_github flow-CSDN博客