分支的相关代码
建立、转换、查看所处分支、分支合并的代码、删除分支、撤销删除
- 分支的建立:git branch <branch-name> ,如:git branch master
- 分支的转换:git switch <branch-name> ,如:git switch master
- 所处分支的查看:git branch
- 合并分支:git merge <branch-name> (在集成者中进行此代码操作,***为被集成者的名称)
- 删除分支:git branch -d <branch-name>
- 撤销删除: git branch <branch-name> <base-commit-id>
- 强制删除未合并分支:git branch -D <branch-name>
每个分支中可能包含的文件的注意事项
- 在存储库中转换分支能看到所属的文件处于不同分支的情况,神奇,本地文件夹也会出现这种情况!!!
- 欲对某个分支进行操作时,一定要记得切换到相应的分之后,再进行操作。最好养成操作前对所处分支进行查看的习惯。若写到别的分支,将会导致分支的内容混乱。
- 每次切换分支时,git会重写你的工作目录,使得工作目录与之前你在这个分支(就是切换到的目标分支)上最新提交时的状态一致
分支是什么?怎么表现?
分支只是提交的一个引用。每个后面的提交会记录在它之前的一个提交。数据结构为指针指向父节点的树
合并分支可能的情况(集成者和被集成者的区别)
- 合并中的快进(被集成者完全包含集成者,集成者的指针移动到被集成者,其余不变)
- 合并中没有任何变化(集成者完全包含未集成者,集成者不用变则已经包含了合并的概念)
- 新合并的提交有两个父提交(集成者和被集成者有两个不重复的分支,新生成的提交指向两个分支的最后节点)
对于集成后有两个父提交的情况:
- 集成分支和被集成分支上有相同的文件,并且内容一致,则不存在冲突
- 集成分支和被集成分支上有相同的文件,但是内容不一致,则存在冲突
解决分支合并冲突的办法:
编辑器中修改内容,在重新提交即可
怎么解决合并分支中的冲突问题?下面举一个例子:(若新建库有疑惑可查看写文章-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。
冲突解决成功。
分支的删除
- 若删除的分支已经和其他分支进行合并,那么提交历史不会改变。
- 若删除的分支未合并,git首先拒绝你这么做,并提醒你该分支未进行合并。此时亦可强制删除,代码为:git branch -D <branch-name>