Git 分支管理

简介: Git 分支管理

一、引入

Git 分支管理是 Git 的另一杀手锏。其实分支的概念就像科幻电影里面的平行宇宙,可以让多个任务在不同的分支上并行进行。

  1. 实际开发中,引入分支可以将不同的功能或任务隔离开来,使得多个开发人员可以同时并行开发不同的功能,而不会相互干扰或冲突,可以提高团队的开发效率。
  2. 并且在引入分支还可以更好的进行风险控制,例如,新功能的开发和测试可以在独立的分支上进行,不会直接影响主分支的稳定性。如果功能开发出现问题,只影响到该分支,而不会对整个代码库造成影响。
  3. 并且在错误修复上也会更加方便。例如,如果在主分支上发现了错误或问题,可以创建一个临时分支进行错误修复。修复完成后,可以将修复后的代码合并回主分支,而不会干扰正在进行的其他工作。

二、创建合并分支

默认情况下,Git 中只有一个默认 master 分支,而之前介绍的 HEAD 其实就是指向默认分支 master 的。

  1. 查看分支:git branch
  2. 创建分支:git branch <name>
  3. 切换分支:git checkout <name>或者git switch <name>
  4. 创建+切换分支:git checkout -b <name>或者git switch -c <name>
  5. 合并某分支到当前分支:git merge <name>
  6. 删除分支:git branch -d <name>

上面列举出了常用的分支命令,使用上述命令我们大概能得到如下流程:

但是注意这里的合并是“Fast-forward”快合并模式,也就是直接吧 master 指向 dev 的当前提交,所以速度非常快。

三、解决突。

对于合并分支时,可能会出现这样一种情况:我们在两个分支上的修改涉及到相同的文件或代码行,那么在分支合并的时候就会出现合并冲突。


当Git检测到冲突时,会在冲突发生的文件中插入特殊标记来指示冲突的位置。这些标记通常是<<<<<<<,=======和>>>>>>>。并且 Git 会告诉我们具体的冲突文件,此时我们可以通过查看冲突文件找到冲突内容,然后手动解决冲突后再次提交。

Tips:使用 git log --graph 命令可以看到分支合并图。

四、分支合并策略

上面我们介绍了,如果可能,默认情况下 Git 会用 Fast forward 模式进行分支合并。但通常情况下,我们合并分支之后通常会删除分支,这种情况下就会丢失分支信息,这个时候我们就看不出来最新提交到底是 merge 进来的还是正常提交的。

所以一般我们会禁用 Fast forward 模式,这样 Git 会在 merge 合并的时候生成一个新的 commit:

git merge --no-ff -m "message" <branch_name>

五、分支管理策略

在实际开发中,我们应该按照几个基本原则进行分支管理:

首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

六、Bug 分支

在实际开发中 Bug 可以说是司空见惯了,我们前面也已经见识到了 Git 的分支管理是非常强大的,所以每个 Bug 我们一般都会新建一个临时分支进行修复,修复完成后,再进行合并同时删除临时分支。

但是如果当前工作区中的代码只写了一半,还不能提交,并且这个 Bug 又非常紧急需要立即修改,这时该怎么办?幸好 Git 还提供了一个 stash 功能,可以把当前工作现场保存起来,等以后 Bug 修复完了再恢复现场继续工作。

上面涉及到保存现场和恢复现场,具体命令如下:

  1. git stash 保存工作现场
  2. git stash list 查看工作现场
  3. git stash apply 恢复后,stash内容并不删除,你需要用git stash drop来删除
  4. git stash pop 恢复的同时把stash内容也删了

假设我们的 Bug 是在 master 分支上修复的,那么此时 Master 分支目前最新的提交,是要领先于新建 dev2 时基于的 master 分支的提交的,所以我们在 dev2 中当然看不见修复 bug 的相关代码。如下图:

我们的最终目的是要让 master 合并 dev2 分⽀的,那么正常情况下我们切回 master 分⽀直接合并即可,但这样其实是有一定风险的。因为在合并分⽀时可能会有冲突,而代码冲突需要我们手动解决(在 master 上解决)。我们无法保证对于冲突问题可以正确地一次性解决掉,因为在实际的项目中,代码冲突不只一两行那么简单,有可能几十上百行,甚至更多,解决的过程中难免手误出错,导致错误的代码被合并到 master 上。

解决这个问题的一个好的建议就是:最好在自己的分支上合并下 master ,再让 master 去合并 dev ,这样做的⽬的是有冲突可以在本地分支解决并进行测试,而不影响 master 。

七、删除临时分支

软件开发中,总有⽆穷⽆尽的新的功能要不断添加进来。添加⼀个新功能时,你肯定不希望因为⼀些实验性质的代码,把主分搞乱了,所以,每添加⼀个新功能,最好新建⼀个分⽀,我们可以将其称之为 feature 分⽀,在上⾯开发,完成后,合并,最后,删除该 feature 分⽀。

可是,如果我们今天正在某个 feature 分⽀上开发了一半,被产品经理突然叫停,说是要停止新功能的开发。虽然白干了,但是这个 feature 分支还是必须就地销毁,留着无用了。这时使用传统的 git branch -d 命令删除分支的方法是不行的。于是有了如下方式:

git branch -D <branch_name>


相关文章
|
1月前
|
API 开发工具 git
《Git 简易速速上手小册》第3章:分支管理(2024 最新版)
《Git 简易速速上手小册》第3章:分支管理(2024 最新版)
57 1
|
1月前
|
开发工具 git
|
1月前
|
安全 开发工具 git
【Git】—— 分支管理策略
【Git】—— 分支管理策略
|
1月前
|
开发工具 git 开发者
git仓库分支管理
git仓库分支管理
|
4天前
|
敏捷开发 测试技术 持续交付
【git分支管理策略】如何高效的管理好代码版本
【git分支管理策略】如何高效的管理好代码版本
10 0
|
25天前
|
开发工具 git
【Git】分支管理的基本操作
【Git】分支管理的基本操作
|
1月前
|
开发工具 git
Git分支管理
Git分支管理
Git分支管理
|
1月前
|
数据可视化 持续交付 开发工具
实际项目中如何使用Git做分支管理
实际项目中如何使用Git做分支管理
|
1月前
|
数据可视化 安全 开发工具
git的分支的使用,创建分支,合并分支,删除分支,合并冲突,分支管理策略,bug分支,强制删除分支
git的分支的使用,创建分支,合并分支,删除分支,合并冲突,分支管理策略,bug分支,强制删除分支