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/

 

posted @ 2023-06-12 10:15  小粉优化大师  阅读(554)  评论(0编辑  收藏  举报