git应用详解六:git分支

本文详细介绍了Git的分支管理,包括如何查看和创建分支、切换和合并分支,重点讲解了Fast-forward合并策略。内容涵盖基本操作、分支原理、合并冲突解决,以及Fast-forward的两种模式:使用和禁用。通过实例展示了不同情况下的分支操作和状态变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 分支基本操作

查看当前所在分支以及当前版本库中的所有分支:

git branch

在这里插入图片描述

图片所示,*表示的是当前分支,当前版本库中只有一个master分支。

创建新分支:

git branch new_branch

在这里插入图片描述

切换分支:

git checkout new_branch 

在这里插入图片描述
可以查看一下新分支中有哪些内容:
在这里插入图片描述
可以看到,新分支与原分支的内容完全相同。
git在创建分支时新分支和原分支的文件信息是完全一样的。
下面在新分支上创建一个文件,并将其加入版本库:
在这里插入图片描述
在从new_branch切换回master分支:
在这里插入图片描述
可以看到,master分支上并没有刚刚创建的新文件,这是两个分支的内容已经不一样了。

删除分支:

git branch -d new_branch

在这里插入图片描述
可以看到,由于分支没有合并,所以如果确认删除的话,使用-D。
在这里插入图片描述
还有一点需要注意的是,不能删除当前所在分支,即如果当前分支为 new_branch 的话,是不能删除 new_branch的。

创建并切换分支:

git checkout -b new_branch 

在这里插入图片描述

2 合并分支

先在new_branch分支上往test.txt文件中添加一行,并提交:
在这里插入图片描述
切回master分支,并查看文件内容:
在这里插入图片描述
可以看到,master分支和new_branch分支的内容是不同的,下面将new_branch分支合并到master分支:

git merge new_branch

该命令是将new_branch分支的内容合并到当前分支,即master分支
在这里插入图片描述
输出中可以看到Fast-forward,这就是快进的意思,是git分支合并的一种策略,合并时会直接指向最新的提交。
此时master分支和new_branch分支的内容相同,此时可以删除new_branch分支,不会报错
在这里插入图片描述
可以看到,使用-d就可以删除分支,而不用使用-D来删除。

3 分支原理

当只有一个主分支时,如下图所示:
在这里插入图片描述
一个圆圈就是一次提交,master指向master分支的提交,HEAD指向当前所在分支。
关于HEAD在前面有用过,在丢弃暂存区的修改时,使用过 git reset HEAD file命令:
在这里插入图片描述
当创建一个分支并切换到该分支时,如图所示:
在这里插入图片描述
此时new_branch分支和master分支指向的是同一个提交,所以他们的文件信息完成相同,当在新分支上进行提交时,状态变为下图所示:
在这里插入图片描述
当进行分支合并时,master直接快进到new_branch的最新提交
在这里插入图片描述
此时new_branch和master分支的文件信息完全相同。注意,此时的HEAD指向master分支,因为合并操作是在master分支上进行的,git merge new_branch是将new_branch分支合并到当前分支。

下面来演示一下:
首先到master分支上看看最新的提交:
在这里插入图片描述
接着新建一个分支,并提交两次:
在这里插入图片描述
看一下日志:
在这里插入图片描述
下面切回master分支,进行分支合并:
在这里插入图片描述
git checkout - 命令以前没有提过,使用 - 会切换回上一次所在的分支,在这里和git checkout master是等价的,因为上一次在master分支。
看一下日志:
在这里插入图片描述
可以看到master直接跳到了commit id为b194d的提交。

4 分支合并冲突

当在新分支修改并提交后,再切换到master分支修改同一个文件同一行,就会发生冲突:
在这里插入图片描述
可以看到,最后提示发生冲突,发生冲突的文件为test.txt,自动合并失败,需要解决冲突然后将结果提交。
下面看一下test.txt的内容:
在这里插入图片描述
在文件中通过"<<<<<<< HEAD"、"=======“和”>>>>>>> new_branch"来标识发生冲突的地方,要保留那个自己决定。
修改文件,看一下状态:
在这里插入图片描述
提示可以使用git add来标记解决了这个冲突,也可以使用git merge --abort 来取消这次合并。
在这里插入图片描述
使用git add后,提示所有的冲突都解决了,但仍然处于合并状态,需要使用git commit 完成合并。
如果使用git commit不加 -m的话,进入vi编辑器,里面git自动生成了一条提交消息:
在这里插入图片描述
不做任何修改提交:
在这里插入图片描述
看一下日志:
在这里插入图片描述
圈出来的两条分别是在new_branch和master上的提交日志,最新的是解决冲突后的提交日志。

5 Fast-forward

Fast-forward是快进的意思,git合并分支时默认使用的是这个,当然也可以禁用。当禁用Fast-forward时,合并分支会产生一个新的提交。下面看例子

5.1 使用Fast-forward(默认)

首先从master切出一个分支branch_ff:
在这里插入图片描述
在文件中增加一行并提交:
在这里插入图片描述
查看日志:
在这里插入图片描述
切回master分支将branch_ff分支合并到master:
在这里插入图片描述
这里提示了Fast-forward,看看日志:
在这里插入图片描述
会发现master的最新的commit也变成了6a4ac… 这和在brach_ff分支上看到的commit一致。这就是fast-Forward的意思,直接指向最新提交。

5.2 禁用Fast-forward

在从master且出一个branch_no-ff,并在文件中增加一行后提交:
在这里插入图片描述
查看一下日志:
在这里插入图片描述
切回master分支,使用命令:

git merge --no-ff branch_no-ff

当使用这个命令之后,会进入一个vi编辑界面,需要填写提交消息,并且已经默认生成了一个提交消息。
在这里插入图片描述
不修改直接退出
在这里插入图片描述
查看日志:
在这里插入图片描述
可以看到,图中的第二个提交才与branch_no-ff分支的提交相同,而最新的提交是合并是产生的,这就是禁用Fast-forward与默认使用的区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值