Git分支管理

发布于:2024-11-27 ⋅ 阅读:(144) ⋅ 点赞:(0)

目录

一、理解master主分支

二、分支管理

1.创建分支

2.切换分支

3.合并分支

4.删除分支

5.合并冲突

三、分支管理策略

1.Fast forward模式

2.分支策略

3.bug分支

4.强制删除分支


一、理解master主分支

在版本回退中,每次提交Git都会将它们串成一条时间线,这条时间线就是一个分支。

在Git中,这个分支叫做主分支,即master分支

HEAD指针指向master分支,即指向当前分支,也就是当前的工作分支

二、分支管理

1.创建分支

首先使用git branch查看当前本地仓库中的所有分支

git branch

再使用git branch + 分支名创建新分支,例如创建新分支dev

git branch dev

成功创建dev分支后使用git branch查看所有分支,发现确有两个分支,加*的为工作分支 

查看两个分支的内容,发现它们都指向最新的提交

2.切换分支

使用git checkout命令完成分支切换,例如切换dev分支为工作分支

git checkout dev

切换dev分支为工作分支后,HEAD指针就指向dev分支

在dev分支下进行修改/提交文件等操作,dev分支会一直指向最新提交,但是master分支不变。

例如修改文件test1.cc并提交到版本库中,切换到master分支下查看test1.cc文件发现内容并没有被修改,而切换到dev分支下查看test1.cc文件发现内容确实被修改了。并且dev分支和master分支指向的最新提交也不相同,如下图所示:

3.合并分支

使用git merge指令合并分支,例如合并dev分支

git merge dev

4.删除分支

删除分支只能在其他分支下删除某个分支

使用git branch -d指令删除分支,例如删除分支dev(不能在dev分支下删除dev分支)

git branch -d dev

5.合并冲突

假设存在dev分支,如果dev分支修改了文件并提交,同时master分支也修改了该文件并提交,此时再进行分支合并就会导致合并冲突。因为Git不知道应该保留哪一个分支的修改。

发生合并冲突时,Git会对冲突文件进行标注,指明冲突内容和不同分支对文件的修改情况

可以使用git log --graph --abbrev-commit命令查看分支合并情况

git log --graph --abbrev-commit

解决合并冲突的办法就是再次修改文件,保留其中一个分支修改内容,再次提交即可

三、分支管理策略

1.Fast forward模式

Git在常规合并分支时通常会采用Fast forward模式,在Fast forward模式下合并分支后再删除分支,会删除分支的历史信息,导致无法确认最新提交是合并分支得来的还是正常提交得来的。

Git在合并冲突时会采用普通模式,保留历史分支信息,这样就可以确认最新提交是如何得来的。

很明显,普通模式更好用。所以Git提供了一个--no--ff选项,支持在合并分支时禁用  Fast forward模式,保留历史分支信息。

禁用Fast forward模式后会自动生成一个新的commit,所以要带上 -m 对新提交进行描述

git merge --no-ff -m "merge with --no--ff" dev

2.分支策略

实际开发中,master分支应该是非常稳定的,仅用来发布新版本,并不在其上面进行代码开发。

而是在dev分支上进行开发,开发新功能,测试完毕没有问题后再和master分支合并。

所以实际团队开发的分支图就像下面这样:

3.bug分支

存在场景:在dev分支上开发,此时master分支上的代码出现了bug

首先我们肯定不能直接在master分支上直接改bug,可能会引发更多的bug,所以通常会创建一个临时分支,即bug分支用于修复bug。但是如果直接切换到bug分支,在dev分支上开发的代码还未提交,由于是在工作区的文件,切换到bug分支上也能看到在dev分支上开发的代码,影响bug的修复。然而又不能直接将dev分支上还未开发完成的代码提交了,并且此时master分支还存在未修复的bug。因此Git提供了git stash命令用于将当前工作区的信息进行储藏,此时再切换到bug分支上就不会看到dev分支上开发的代码。在bug分支上修复bug完成后,切换回到master分支,master分支合并bug分支,再回到dev分支使用git stash list命令查看存储起来的内容,再使用git stash pop恢复存储起来的内容,继续未完成的代码开发。开发完成后此时dev分支并不能看到master分支上已经修复bug的代码,因此还要master合并dev。但是此时会有合并冲突,如果让master分支合并dev分支需要在master分支上手动解决冲突,但是在master分支上解决冲突可能会导致手误出错。因此建议让dev分支合并master分支,在dev分支上手动解决冲突,随后再切换到master分支上让master分支合并dev分支。

总体流程如下:

  • 存储dev分支上未完成的代码
  • 切换到master分支,新建bug分支
  • 切换到bug分支,在bug分支上修复bug并提交
  • 切换到master分支,master分支合并bug分支,删除bug分支
  • 切换到dev分支,恢复存储的代码,继续未完成的代码开发
  • dev分支合并master分支,发生合并冲突,在dev分支上手动解决冲突
  • 切换到master分支,master分支合并dev分支,删除dev分支
git stash #存储工作区文件内容
git stash list #查看存储内容
git stash pop #恢复存储内容

4.强制删除分支

对于已经全部提交的分支,我们可以使用git branch -d指令删除

但是如果该分支有未提交的文件或者未合并,需要使用git branch -D指令删除

适用场景:正在dev分支上开发某个新功能,但是此时产品经理叫停该新功能的开发,不再需要该功能,那么dev分支就需要删除。

git branch -D dev

网站公告

今日签到

点亮在社区的每一天
去签到