git-分支基础:创建分支、切换分支、合并分支、删除分支
1、分支对象
1.1、分支效果图
1.2、说明
我们知道 Git 中的master分支,就是个指向 commit 对象的可变指针。每次提交代码后的commit对象都在变化,所以master分支的位置也在不断的向前移动。
我们可以基于分支名,找到对应的commit对象,从而可以找到指定版本的快照内容。
注意:
紫色粗线表示的是commit对象的依赖关系
红色虚线表示的是master分支的所在位置
2、分支简介
2.1、创建分支
2.1.1、简介
分支其实就是一种从某个commit对象找代码内容的一种方式,master分支是默认创建的,工作中一个分支,肯定是不够用的,我们可以通过 git branch命令来查看和创建分支
2.1.2、命令介绍
git branch <分支名称> <commit_id> 注意: 不加分支名,表示查看当前所在的分支 加上分支名,表示创建一个分支 加上commit_id,相当于将基于指定的commit_id 创建一个新分支保留下来,用于"分离HEAD"情况
2.2、切换分支
2.2.1、简介
我们想切换到另外一个分支的话,可以使用git checkout命令来实现
2.2.2、命令介绍
git checkout -b <分支名> 注意: 不加 -b 参数表示,切换到一个已存在的分支名, 加 -b 参数表示,切换到一个新的分支,如果分支名不存在,我们会创建好后,再切过去。 该命令不允许在本地仓库(.git)中使用,只允许在工作目录下使用。
2.3、合并分支
2.3.1、简介
使用git merge命令来实现将A分支的内容合并到master分支上的效果。
2.3.2、命令介绍
git merge <其他分支>
注意:
先切回到将要合并的分支(master)上,才能达到执行该命令的效果
默认情况下,只能让两个有关联的分支进行合并,如果对于完全不想关的分支进行合并的话,
需要额外在merge后面添加一个参数 --allow-unrelated-histories
2.4、删除分支
2.4.1、简介
可以使用git branch 命令将该分支删除
2.4.2、命令介绍
git branch -d|D <分支名称> 注意: 该命令不能在B分支上删除B分支 -D 的作用是,强制删除一个有内容的分支
3、实践
3.1、创建分支
3.1.1、查看当前分支
git branch
3.1.2、创建test分支
git branch test
git branch
3.1.3、检查创建结果
# git branch * master test # tree .git/refs/ .git/refs/ ├── heads │ ├── master │ └── test └── tags # 结果显示:我们发现在master前面有一个"*",他的意思就是说明我们当前所处的分支是master,
3.1.4、 分析.git目录
# 在.git目录下有一个HEAD文件,该文件的内容就表明我们处在哪个位置 # cat .git/HEAD ref: refs/heads/master # cat .git/refs/heads/test bd39d33a6588cca1b7c8fafd170b8596a26e01f7 # 可以看到: test分支,其实就是基于当前commit对象的一个40字节长的加密hash值,所以创建起来非常快。
3.1.5、提交对象和分支之间的关系图
3.1.6、HEAD信息
HEAD 默认指的是上一个commit信息 HEAD^ 表示HEAD的父commit记录,依次类推HEAD^^ 表示祖父commit记录 HEAD~6 表示氮气HEAD之前的第六个commit记录 祖先提交的标识符主要有两个: ^ 和 ~
3.2、切换分支
3.2.1、切换分支
# 切换到test分支 # git checkout test # 切换到分支 'test' # git branch master * test # cat .git/HEAD ref: refs/heads/test # 结果显示:我们切到了test分支,而且本地仓库的HEAD指针也指到了test分支上了。
3.2.2、提交对象和分支之间的关系图
3.2.3、在新分支上增加文件和提交代码到本地仓库,并查看commit记录效果
echo test > test.txt git add test.txt git commit -m "test.txt" git log --pretty=oneline --graph git checkout master git log --pretty=oneline --graph cat .git/HEAD
3.2.4、在master分支上编辑文件后提交代码到本地仓库,并查看commit记录效果
rm -f *.txt git add . git commit -m "rm 3file" git log --pretty=oneline --graph
3.3、合并分支
# 切回到master分支 git checkout master git branch # 合并test分支上内容到master上 git merge test # git log --pretty=oneline --graph * 54e10f0af4a6fced61c77afa5b31b1e34cce0e7a (HEAD -> master) Merge branch 'test' |\ | * 3bd1a383bbf6075722bfe505c5457fd3472bc5b0 (test) hello.txt * | 3039947505e8d6611c32773544efdf2713d5541c rm *.txt |/ * bd39d33a6588cca1b7c8fafd170b8596a26e01f7 A
3.4、删除分支
# 确保自己没有在要删除的分支上 git branch # 删除指定的分支 git branch -d test # 确认效果 ls .git/refs/heads/