git总结二、关于分支上——好好认识下分支是怎么回事

同样需要先来明确两件事:

  • HEAD指针指向的是当前分支
  • 分支(master, dev)指向的是最新的提交

一开始,git 中只有一个master分支,严格来讲,HEAD不是指向提交而是指向master,master才是指向提交的,HEAD指向的是当前分支;

这是git最开始的状态,用master指向最新的提交,再用HEAD指向master,这样就能确定当前的分支,以及当前分支的提交点,每次提交,master分支都会向前移动一步,这样随着你不断提交,master分支就会越来越长。 
 
接下来我们来清晰的看下一个分支从创建到合并再到删除,git到底都做了什么。
 
1、创建并切换分支:
Git checkout -b dev   

当创建一个新的分支时,git会去新建一个指针如dev,指向master相同的提交;
当切换分支到dev时,git做的是将HEAD指向dev; 
 
从此以后的所有提交都是在dev分支上,没提交一次修改,dev指针会向前移动一步,HEAD指向dev
Git add .
Git commit -m “d” 

 

2、 合并分支(dev合并到master)

(1) Git checkout master   切换回master分支

此时发生的是:HEAD指针指向master

(2)

Git merge dev        合并分支dev到master上
Git 下面出现的提示信息:
Updating d46f35e..b17d20e
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+) 

注意Fast-forward:这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。(当然也不是每一次合并都是快进模式)
Fast forward模式:
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git merge --no-ff -m "merge with no-ff" dev
—no-ff:强制禁用Fast forward:
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

3、删除分支

Git branch -d dev
 
 

 

posted @ 2019-04-25 17:08  悠扬小曲儿  阅读(244)  评论(0编辑  收藏  举报