五、Git本地仓库基本操作——分支管理

1. 什么是分支?

master分支

我们在初始化git仓库的时候,会默认创建一个master分支,HEAD指针这时就会默认执行master分支。当我们在master分支提交(commit)了更新之后,master分支就会指向当前当前最新的commit。看下图比较好理解:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SR76gqQN-1676116725836)(../picture/image-20221203233059324.png)]

创建新的分支后HEAD指针移动情况

但是随着时间的推移,我们可能会一个版本在原来的基础上改动很大,或者说其他同事在主分支上创建自己的分支进行独立开发,然后开发验证完毕之后再合并到master分支。

比如我们在master分支创建debug分支,刚创建时debug分支会指向master分支相同的commit提交的位置,并且git会更改HEAD指针指向新的分支debug。如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jYti5UAM-1676116725837)(../picture/image-20230211160937422.png)]

这里创建一个新分支,其实就是HEAD指针指向了新的分支,工作区的内容并没有改变。

这时,我们就会在debug分支上面进行开发工作,commit到debug分支了。比如我们在debug分支上提交了两次commit,那么debug分支会往前移动两次,但是master分支是不变的。如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c0YMUBQy-1676116725837)(…/picture/image-20230211161559195.png)]

debug分支与master分支合并

上面我们创建了debug分支,如果我们做完了debug分支的工作,想合并到master分支怎么合并。通过上图我们可以知道,简单的方法就是把master分支也指向debug分支的commit即可,这样master分支和debug分支就又指向了同一个最新的commit了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hpv9HgPU-1676116725838)(../picture/image-20230211162203020.png)]

合并完之后,如果不需要debug分支了,我们可以删除debug分支。

2. 为什么需要分支?

分支其实就是为了更方便的对一个项目进行版本控制。上面我们也提到,多个人进行协同开发,每个人可以创建自己的独立分支,等到测试验证OK了,那么就可以合并到主分支,这样在开发过程中不会影响到master分支。

  • 可以多人在各自分支进行独立开发
  • 各个分支互相独立,互不影响,各自的分支开发完成就可以合并到主分支

3. 分支的具体操作

3.1 查看分支

git branch       # 查看当前分支
git branch -v    # 查看当前分支,并列出最近一次提交
git branch -a    # 查看本地的所有分支
git branch -r    # 查看远程分支

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WZKSyOJ7-1676116725838)(../picture/image-20230211170625945.png)]

3.2 新建分支

git branch <分支名称>
git checkout -b <分支名称>   # 创建并切换到该分支,相当于两条命令

!)

3.3 切换分支

git checkout <分支名>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YRJqvQC1-1676116725839)(../picture/image-20230211173006520.png)]

记录:我在工作的电脑上试过切换分支,如果在当前已经有的修改还没有commit的话,那么git是不让切换的,切换失败。但是在我自己的笔记本使用,又可以正常切换。不知道怎么回事,这里记录下,后面慢慢了解。

当我们切换完分支之后,在这个分支上一样可以git add追踪文件、git commit提交到本地仓库等操作。

3.4 分支的合并

git merge 想要合并的分支名称

分支合并之前,需要先切换到想要合并的分支,然后再执行分支合并命令。

比如,我在debug分支做的修改,想合并到master分支。那么首先就要切换到master分支,然后再执行 git merge 合并命令。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xl0hFqnO-1676116725839)(../picture/image-20230211175802589.png)]

下面,我们在debug分支做一些更改,并且提交更新到该分支。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LPFZKNKI-1676116725839)(../picture/image-20230211180910496.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u7fYWidR-1676116725839)(../picture/image-20230211181005483.png)]

3.5 删除分支

git branch -d 分支名称

上面,我们已经吧debug分支合并到主分支了,如果觉得debug分支不再使用,那么我们可以删除该分支。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cZigWcuJ-1676116725840)(../picture/image-20230211181328227.png)]

4. 分支合并产生的冲突问题解决

4.1 冲突如何产生

同一个文件的同一个地方的内容,被不同的分支修改了,并且提交了commit的。

比如我上面创建的debug分支修改了test.c文件的第8行,然后commit;然后再切换到master分支,master分支同样修改了tset.c文件的第8行,然后commit。这个时候,我们想要吧debug分支内容合并到master分支,那么就会产生冲突。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-od72Vt9S-1676116725840)(../picture/image-20230211185847584.png)]

4.2 冲突解决

上面,我们执行 git merge debug 命令后会自动合并的,但是冲突的原因,进入了手动合并的模式,git 命令行也提示了MERGING字样。

手动合并的操作步骤:

1、执行 git status 命令,确认需要手动合并的文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AdjuInHE-1676116725840)(../picture/image-20230211190152890.png)]

2、打开该文件,确认自己需要保留那些内容,删除哪些内容。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c0vyQ7qH-1676116725841)(../picture/image-20230211190455465.png)]

3、删除保存之后,我们就可以提交到暂存区,然后commit到本地仓库了。commit到本地仓库之后,就会退出手动合并的模式。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/luobeihai/article/details/128988057