本章开始介绍 Git 的杀⼿级功能之⼀(注意是之⼀,也就是后⾯还有之⼆,之三……):分⽀。分⽀就是科幻电影⾥⾯的平⾏宇宙,当你正在电脑前努⼒学习 C++ 的时候,另⼀个你正在另⼀个平⾏宇宙⾥努⼒学习 JAVA
如果两个平⾏宇宙互不⼲扰,那对现在的你也没啥影响。不过,在某个时间点,两个平⾏宇宙合并了,结果,你既学会了 C++ ⼜学会了 JAVA!
在版本回退⾥,你已经知道,每次提交,Git都把它们串成⼀条时间线,这条时间线就可以理解为是⼀个分⽀。截⽌到⽬前,只有⼀条时间线,在Git⾥,这个分⽀叫主分⽀,即master分⽀。再来理解⼀下HEAD,HEAD严格来说不是指向提交,⽽是指向master,master才是指向提交的,所以,HEAD指向的就是当前分⽀
每次提交,master分⽀都会向前移动⼀步,这样,随着你不断提交,master分⽀的线也越来越⻓,⽽HEAD只要⼀直指向master分⽀即可指向当前分⽀
通过查看当前的版本库,我们也能清晰的理出思路
@139-159-150-152:~/gitcode$ cat .git/HEAD
ref: refs/heads/master
@139-159-150-152:~/gitcode$ cat .git/refs/heads/master
5476bdeb12510f7cd72ac4766db7988925ebd302
创建分⽀
Git⽀持我们查看或创建其他分⽀,在这⾥我们来创建第⼀个⾃⼰的分⽀dev ,对应的命令为:
@139-159-150-152:~/gitcode$ git branch #查看当前本地所有分⽀
* master
@139-159-150-152:~/gitcode$ git branch dev #新建分⽀dev
@139-159-150-152:~/gitcode$ git branch
dev
* master
当我们创建新的分⽀后,Git新建了⼀个指针叫dev, * 表⽰当前 HEAD指向的分⽀是 master 分⽀。另外,可以通过⽬录结构发现,新的 dev 分⽀
@139-159-150-152:~/gitcode$ ls .git/refs/heads/
dev master
@139-159-150-152:~/gitcode$ cat .git/refs/heads/*
5476bdeb12510f7cd72ac4766db7988925ebd302
5476bdeb12510f7cd72ac4766db7988925ebd302
发现⽬前dev和master指向同⼀个修改。并且也可以验证下HEAD⽬前是指向 master 的
@139-159-150-152:~/gitcode$ cat .git/HEAD
ref: refs/heads/master
切换分⽀
那如何切换到dev分⽀下进⾏开发呢?使⽤ git checkout 命令即可完成切换,⽰例如下:
@139-159-150-152:~/gitcode$ git checkout dev
Switched to branch 'dev'
@139-159-150-152:~/gitcode$ git branch
* dev
master
@139-159-150-152:~/gitcode$ cat .git/HEAD
ref: refs/heads/dev
我们发现HEAD已经指向了dev,就表⽰我们已经成功的切换到了dev上
接下来,在 dev 分⽀下修改ReadMe⽂件,新增⼀⾏内容,并进⾏⼀次提交操作
@139-159-150-152:~/gitcode$ vim ReadMe
@139-159-150-152:~/gitcode$ cat ReadMe
hello bit
hello git
hello world
hello version1
hello version2
hello version3
write aaa for new branch
@139-159-150-152:~/gitcode$ git add .
@139-159-150-152:~/gitcode$ git commit -m"modify ReadMe"
[dev 3740dce] modify ReadMe
1 file changed, 1 insertion(+)
现在,dev分⽀的⼯作完成,我们就可以切换回master分⽀:
@139-159-150-152:~/gitcode$ git checkout master
Switched to branch 'master'
@139-159-150-152:~/gitcode$ cat ReadMe
hello bit
hello git
hello world
hello version1
hello version2
hello version3
切换回master分⽀后,发现ReadMe⽂件中新增的内容不⻅了!!!赶紧再切回dev看看:
@139-159-150-152:~/gitcode$ git checkout dev
Switched to branch 'dev'
@139-159-150-152:~/gitcode$ cat ReadMe
hello bit
hello git
hello world
hello version1
hello version2
hello version3
write aaa for new branch
在dev分⽀上,内容还在。为什么会出现这个现象呢?我们来看看dev分⽀和master分⽀指向,发现两者指向的提交是不⼀样的
@139-159-150-152:~/gitcode$ cat .git/refs/heads/dev
bdaf528ffbb8e05aee34d37685408f0e315e31a4
@139-159-150-152:~/gitcode$ cat .git/refs/heads/master
5476bdeb12510f7cd72ac4766db7988925ebd302
看到这⾥就能明⽩了,因为我们是在dev分⽀上提交的,⽽master分⽀此刻的提交点并没有变,此时的状态如图如下所⽰
当切换到master分⽀之时,HEAD就指向了master,当然看不到提交了!
合并分⽀
为了在master主分⽀上能看到新的提交,就需要将 dev 分⽀合并到 master 分⽀,⽰例如下
@139-159-150-152:~/gitcode$ git branch
* dev
master
@139-159-150-152:~/gitcode$ git checkout master # 切换到 master 上进⾏合并
Switched to branch 'master'
@139-159-150-152:~/gitcode$ git merge dev # 合并 dev 分⽀
Updating 16623e1..3740dce
Fast-forward
ReadMe | 1 +
1 file changed, 1 insertion(+)
@139-159-150-152:~/gitcode$ cat ReadMe
hello bit
hello git
hello world
hello version1
hello version2
hello version3
write aaa for new branch
git merge 命令⽤于合并指定分⽀到当前分⽀ 合并后,master就能看到dev分⽀提交的内容了 此时的状态如图如下所⽰
Fast-forward代表“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度⾮常快当然,也不是每次合并都能Fast-forward,我们后⾯会讲其他⽅式的合并
删除分⽀
合并完成后,dev分⽀对于我们来说就没⽤了,那么dev分⽀就可以被删除掉,注意如果当前正处于某分⽀下,就不能删除当前分⽀,如:
@139-159-150-152:~/gitcode$ git branch
* dev
master
@139-159-150-152:~/gitcode$ git branch -d dev
error: Cannot delete branch 'dev' checked out at '/home/hyb/gitcode'
⽽可以在其他分⽀下删除当前分⽀,如:
@139-159-150-152:~/gitcode$ git checkout master
Switched to branch 'master'
@139-159-150-152:~/gitcode$ git branch -d dev
Deleted branch dev (was bdaf528).
@139-159-150-152:~/gitcode$ git branch
* master
1 2 3 4 5 6 7
此时的状态如图如下所⽰
因为创建、合并和删除分⽀⾮常快,所以Git⿎励你使⽤分⽀完成某个任务,合并后再删掉分⽀,这和直接在master分⽀上⼯作效果是⼀样的,但过程更安全
文章来源:https://www.toymoban.com/news/detail-787868.html
文章来源地址https://www.toymoban.com/news/detail-787868.html
到了这里,关于【Linux】:Linux中的Git分支管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!