IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Git并行开发「分支」 -> 正文阅读

[开发工具]Git并行开发「分支」

Git并行开发「分支」

一、分支的概念

image-20221004145316287

git会在本地库创建之初默认生成一个master分支,即主分支,专用于保存项目已完成的功能代码。

但是,一个项目往往是由多个模块组成的,在工作中这些模块分别交由不同的组、不同的组员完成。

为了在多人协作的时候避免相互干扰提高协作开发的效率,Git引入分支的概念:

  • 不同模块的负责人应当将自己的代码提交至各自的分支,进行更新迭代。
  • 当模块完成时,再与主分支进行合并。

二、分支的创建与切换

git branch <分支名>

创建分支。


git branch -d/[-D] <分支名>

删除分支。

注:如果该分支还没有被合并,那么必须用-D选项进行强制删除。


git branch -a

查看当前有哪些分支。


git switch [-c] <分支名>

切换分支。

-c表示:创建该分支并切换。

三、分支的合并

合并分支:将某一个分支的修改的内容合并到当前分支上。

分支的合并需要先切换到被合并的分支上。

比如,hot_fix分支要合并到master上,那么先切换到master分支,即git checkout master

git merge <分支名>

将指定分支与当前分支合并。


git cherry-pick <提交哈希值>

将指定的某一次提交与当前分支合并。

git cherry-pick <分支名>

将某个分支最新的一次提交与当前分支合并。


区别

  • git merge会将两个分支的所有文件进行合并
  • git cherry-pick只会将某一次提交涉及的部分文件与当前分支进行合并,适用于不同分支间只合并部分文件的场景

四、合并的冲突及解决

合并冲突:当合并两个分支的同一个文件时,发现两个文件的某个相同的位置都作出了修改,并且内容不同,此时Git无法确定应当保留哪个结果,因此产生合并冲突。

1、制造冲突

master分支和branch_test分支都有一个test.txt文件,内容如下:

hello
c++(original content)

接下来,master分支将test.txt文件修改为:

hello
java(modified by master)

branch_test分支将test.txt文件修改为:

hello
python(modified by branch_test)

此时在master中执行git merge branch_test就会报错:

$ git merge branch_test
Auto-merging test1.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.

2、解决冲突

test.txt的第二行被两个分支修改,因此Git无法判断应当将哪一个分支作出的修改保留下来,因此文件中呈现以下内容:

hello
<<<<<<< HEAD
java(modified by master)
=======
python(modified by branch_test)
>>>>>>> branch_test

可见,Git将两个分支做出的修改全部保留下来,并且进行了标注。

因此,接下来我们要做的事就是:

  1. 将无用的标注部分删除
  2. 手动地选择保留哪个分支修改的内容
hello
python(modified by branch_test) # 保留branch_test修改的内容
  1. 将修改后的文件添加至暂存区
git add <文件名>
  1. 将文件提交至本地库
git commit [-m '捎带信息']

注:这里git commit后不能加文件名。

五、利用分支debug

情景设定:

假设当前正在某一分支进行项目开发,此时另一分支发生bug,但是手头上的工作还没完成,无法提交,但是修复bug的任务非常紧急,怎么办呢?

1、现场保护

git stash

未提交的修改(即工作区修改但未add的文件)先缓存起来(缓存结构为栈,先入后出)。

2、创建分支并在分支进行debug

# 创建分支
git swtich -c hot_fix

# debug,修改文件并提交

# 切换为原分支
git switch original_branch

# 合并
git merge hot_fix

3、恢复现场

git stash pop

如果当时只保存了一个现场,那么调用一次pop即可将缓存内容恢复至工作区,同时将该缓存删除。


否则,需要先查看缓存再恢复当前分支对应的那个

git stash list

查看所有的缓存。

image-20221005180417045


git stash apply <缓存名>

默认的缓存名为stash@{...}

这种恢复方式不会删除缓存,因此需要再次手动删除:

git stash drop <缓存名>

六、惯用分支名

  • master(主分支)

主分支只存在一条,是所有用户可见的正式版本
主分支作为稳定的唯一代码库,不做任何开发使用。
master 分支一般由develop以及hotfix分支合并,任何时间都不能直接修改该分支的代码。

  • develop(开发分支)

简称dev分支,一般只存在一条,维护了当前开发中代码的主线,始终保持代码新于master以及bug修复后的代码
持续集成、最新隔夜版本的生成等都是基于这个分支。由于当前版本迭代较快,开发分支只提供拉取,不进行实际开发

一般开发新功能的feature分支都是基于develop分支创建的。

  • feature(功能分支)

功能分支存在多个,用于开发各种新功能,需要从develop拉取。开发feature完成后,develop分支再将其合并。为了降低对其他feature的影响,一般在提测(提交测试)前merge回develop分支

分支命名: 以feature_开头。

  • hotfix(修补bug分支)

临时性的bug修复分支(fixbug),用于修复线上问题。
从master拉取修复并测试完成merge回master和develop
分支命名:以hotfix_开头。

  • release(预发布分支)

预发布分支develop分支拉取,测试完成后与masterdevelop分支进行合并。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 21:02:35  更:2022-10-08 21:03:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:21:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码