git(二)分支的思维梳理

分支的相关代码

建立、转换、查看所处分支、分支合并的代码、删除分支、撤销删除

  1. 分支的建立:git branch <branch-name>     ,如:git branch master
  2. 分支的转换:git switch <branch-name>      ,如:git switch master
  3. 所处分支的查看:git branch
  4. 合并分支:git merge <branch-name>    (在集成者中进行此代码操作,***为被集成者的名称)
  5. 删除分支:git branch -d <branch-name>
  6. 撤销删除: git branch <branch-name> <base-commit-id>
  7. 强制删除未合并分支:git branch -D <branch-name>

每个分支中可能包含的文件的注意事项

  1. 在存储库中转换分支能看到所属的文件处于不同分支的情况,神奇,本地文件夹也会出现这种情况!!!
  2. 欲对某个分支进行操作时,一定要记得切换到相应的分之后,再进行操作。最好养成操作前对所处分支进行查看的习惯。若写到别的分支,将会导致分支的内容混乱。
  3. 每次切换分支时,git会重写你的工作目录,使得工作目录与之前你在这个分支(就是切换到的目标分支)上最新提交时的状态一致

分支是什么?怎么表现?

分支只是提交的一个引用。每个后面的提交会记录在它之前的一个提交。数据结构为指针指向父节点的树

合并分支可能的情况(集成者和被集成者的区别)

  1. 合并中的快进(被集成者完全包含集成者,集成者的指针移动到被集成者,其余不变)
  2. 合并中没有任何变化(集成者完全包含未集成者,集成者不用变则已经包含了合并的概念)
  3. 新合并的提交有两个父提交(集成者和被集成者有两个不重复的分支,新生成的提交指向两个分支的最后节点)

对于集成后有两个父提交的情况:

  1. 集成分支和被集成分支上有相同的文件,并且内容一致,则不存在冲突
  2. 集成分支和被集成分支上有相同的文件,但是内容不一致,则存在冲突

解决分支合并冲突的办法:

编辑器中修改内容,在重新提交即可

怎么解决合并分支中的冲突问题?下面举一个例子:(若新建库有疑惑可查看写文章-CSDN创作中心

现有一个目录,名称是headfirst-git-samples,该目录下面有一个文件夹,名为loving-git。在此处初始化一个新的存储库,创建一个名为tribute.md的文件,文件内容仅一行,为:

# Tribute to Git

将该文件添加到索引,并以“A”为提交消息提交

接着创建一个分支improvisation,切换到这个分支,编辑tribute.md文件,使其内容如下

将其以文件增加到索引并提交,使用“B”为提交消息

再切换回master分支,编辑tribute.md文件,编辑内容如下:

将其以文件增加到索引并提交,使用“C”为提交消息

(说明:此处master分支上的最新提交是tribute.md文件中使用“C”为提交消息的引用。improvisation分支上的最新提交是tribute.md文件中使用“B”为提交消息的引用。二者在同一个文件上编辑不同的内容)

现要将improvisation分支合并到master分支上,

1.首先需要确定是出于master分支上:使用git branch查看 所处分支

2.将improvisation分支合并到master分支上

# 合并分支的代码
git merge improvisation

结果如下:

解释:merge confilct in tribute.md:说明合并tribute.md存在冲突,需要修正冲突后再提交

3.查看git此时的状态

git status

结果如下:

同样说明需修正冲突后再提交。另both modified,说明tribute.md这个文件在两个分支中都进行了修改。即同一个tribute.md文件,内容不一致。需要进行冲突处理。此时可打开tribute.md文件查看

4.查看tribute.md文件

vim tribute.md

结果如下: 

很明显我们在master分支进行文件合并中出现了错误,并且文件的样式变为上述样式。

我们需要学会看这个文件,

"<<<<<<<HEAD"中的HEAD就是此时的集成分支,即master分支;

“=======”表示分隔符

“>>>>>>>improvisation”中的improvisation就是此时的被集成分支,即improvisation分支。

因此,从"<<<<<<<HEAD"到“=======”是master分支中的内容,称为C

                “=======”到“>>>>>>>improvisation”是improvisation分支中的内容,称为B

即由于B与C的不同,使得合并有冲突。

此时需要做的就是将该tribute.md文件进行修改,成为最终需要进行合并的文件。可以将B删除,也可以将C删除,或者都删除,或者都保留。形成新的tribute.md文件。

作者的处理方式是保留C(注意按需修改,修改后的内容即为提交内容),此时需要将所有提示的符号删除,最终如下:

保存文件,

5.并再次添加索引和提交 

# 添加索引
git add tribute.md

#查看状态
git status

#提交(执行此代码会跳出文本编辑器,意为添加提交的备注信息)
git commit 

git commit后面一行“Merge branch ‘improvisation’”即为git给出的提交备注信息

6.查看当前标志

git branch -v

查看标志可以看到master分支中的最后一个应用的提交信息为:Merge branch ‘improvisation’,

improvisation分支的提交信息为B。

冲突解决成功。

分支的删除

  1. 若删除的分支已经和其他分支进行合并,那么提交历史不会改变。
  2. 若删除的分支未合并,git首先拒绝你这么做,并提醒你该分支未进行合并。此时亦可强制删除,代码为:git branch -D <branch-name>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值