1、理解分支
分支是git的杀手级功能之一。
分⽀就是科幻电影⾥⾯的平⾏宇宙,当你正在电脑前努⼒学习C++的时候,另⼀个你正在另⼀个平⾏宇宙⾥努⼒学习JAVA。
如果两个平⾏宇宙互不⼲扰,那对现在的你也没啥影响。不过,在某个时间点,两个平⾏宇宙合并
了,结果,你既学会了C++⼜学会了JAVA!
一个人--->分身--->合体,一个人
在版本回退⾥,你已经知道,每次提交,Git都把它们串成⼀条时间线,这条时间线就可以理解为是⼀个分⽀。截⽌到⽬前,只有⼀条时间线,在Git⾥,这个分⽀叫主分⽀,即master分⽀。
再来理解⼀下HEAD,HEAD严格来说不是指向提交,⽽是指向master,master才是指向提交的,所以,HEAD指向的就是当前分⽀。(HEAD->master,master->提交)
master就是一个主分支。
每次提交,master分支都向前移动一步。
不断提交,master分支的线越来越长,而HEAD只要一直指向master分支即可指向当前分支。
2、创建分支(git branch branchname)
Git支持我们查看和创建其他分支。
git branch:打印出当前目录下有哪些分支。
[zy@hcss-ecs-4716 gityum2]$ git branch
* master
注意:HEAD是可以指向任意一个分支的。被HEAD指向的分支,才是当前的工作分支。
所以这个”*“就代表当前HEAD指向的分支。
git branch branchname:创建分支。
[zy@hcss-ecs-4716 gityum2]$ git branch dev
[zy@hcss-ecs-4716 gityum2]$ git branch
dev
* master
创建了一个dev分支。
[zy@hcss-ecs-4716 gityum2]$ cat .git/refs/heads/dev
34d6a9a7260a3bc001a5bf43c933da9c39b08865
[zy@hcss-ecs-4716 gityum2]$ cat .git/refs/heads/master
34d6a9a7260a3bc001a5bf43c933da9c39b08865
发现,此时dev和master都是指向同一个的。都是指向当前最新的提交。
因为此时创建dev是在当前最新提交的基础上创建的,所以dev和master指向一致。
3、切换分支(git checkout branchname)
git checkout branchname:
[zy@hcss-ecs-4716 gityum2]$ git branch
dev
* master
[zy@hcss-ecs-4716 gityum2]$ git checkout dev
Switched to branch 'dev'
[zy@hcss-ecs-4716 gityum2]$ git branch
* dev
master
在dev分支上做事,修改ReadMe,然后切回master,看二者有没有区别。
[zy@hcss-ecs-4716 gityum2]$ ls
file2 file3 ReadMe
[zy@hcss-ecs-4716 gityum2]$ vim ReadMe
[zy@hcss-ecs-4716 gityum2]$ git add ReadMe
[zy@hcss-ecs-4716 gityum2]$ git commit -m "md ReadMe on dev"
[dev 1914287] md ReadMe on dev
1 file changed, 1 insertion(+)
[zy@hcss-ecs-4716 gityum2]$ git status
# On branch dev
nothing to commit, working directory clean
[zy@hcss-ecs-4716 gityum2]$ cat ReadMe
hello git
hello world
xxxxxxxxxxxx
hhhhhhhhhhhhhhhhhh
aaa on branch dev
[zy@hcss-ecs-4716 gityum2]$ git checkout master
Switched to branch 'master'
[zy@hcss-ecs-4716 gityum2]$ ls
file2 file3 ReadMe
[zy@hcss-ecs-4716 gityum2]$ git branch
dev
* master
[zy@hcss-ecs-4716 gityum2]$ cat ReadMe
hello git
hello world
xxxxxxxxxxxx
hhhhhhhhhhhhhhhhhh
发现:在dev分支下做了事,在master分支上是没有的。这就是分支管理。分头行动!
4、合并分支(git merge branchname)
因为master是主分支,所以一般都是将其他分支合并到master上。
首先需要切换到master分支: