0


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. 将修改后的文件添加至暂存区
gitadd<文件名>
  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

分支拉取**,测试完成后与

master

develop

分支进行合并。

标签: git github c++

本文转载自: https://blog.csdn.net/Wyf_Fj/article/details/127188962
版权归原作者 白龙码~ 所有, 如有侵权,请联系我们删除。

“Git并行开发「分支」”的评论:

还没有评论