git基础(四)

分支 branch( 非常重要 )

概念: 分支是由多个commit链条按照一定的顺序组成的链 / 一条工作记录线
	  commit 一个版本(每个版本都唯一的sha1)
注意:
	1.git仓库初始化了就有master分支 ,master是主分支(默认分支)
	2.每一个分支必须基于一个commit	
	
有关分支的命令:
	创建分支
	git branch 分支名	
	切换分支 
	git checkout 分支名
	删除分支
	git branch -d 分支名
	查看分支 
	git branch 
		/*
			* master  *代表你当前所在的分支
              dev
			  
		*/
	创建并切换分支	
	git checkout -b 分支名
	
	合并两个分支
	git merge 分支名	

	查看分支当前版本
	git branch -av

实验:不能删除分支的情况(重点)

	1. 不能删除当前分支 
	2. 如果分支包含‘未合并’的内容 不能删除当前分支,
		未合并: 在要删除的分支存在一个新的版本 commit,而且只有当前删除的分支指向于这个版本 
		可以强制 删除 git branch -D dev 
		合并完可以删除
			git merge dev
				/*
					更新 4b4b597..0444a94
					Fast-forward :前进分支分指针由之前的commit 向前走了n步 ,这个向前走的动作,向前合并
					 a.txt | 1 + :0444a94相比于 4b4b597 在a.txt 文件中增加了一行 
					 1 file changed, 1 insertion(+)
				*/
			git branch -d dev
			
	3. 注意两个细节:
		a)如果在分支dev中进行了写(新建文件,删除文件,修改文件)操作 ,但此操作局限在工作区(没有进过add commit)
		在这种情况下,在master分支是可以看到dev分支的写操作的 ,如果 dev 分支对这个写操作执行了add和 commit 
		则master 分支是不能观察到dev这个写操作的 
		
		b)如果在分支dev中进行了写操作 ,但这个写操作仅局限在工作区,
		可以直接删除这个dev分支,原因在master中是可以感知到dev的写操作的 

实验: Fast-forward

		场景:dev分支领先master 两个commit,master落后dev 两个commit
		git merge dev	// 在master分支上合并dev
			merge dev (默认按照 Fast-forward方式合并) 
			merge --no-ff dev (使用 --no-ff方式合并)
			/*
				更新 ff6eefd..9a5d8f0
				Fast-forward
				 a.txt | 3 +++
				 1 file changed, 3 insertions(+)
			*/
		 注意:
			1. 合并后也会保留中间的commit
			2. git merge 合并后 两个分支归于同一个commit
			3. Fast-forward合并方式丢失分支信息
				git log --graph
				git log --graph --pretty=oneline --abbrev-commit

实验 :–no-ff 合并方式

	场景:dev分支领先master 两个commit,master落后dev 两个commit
		git merge --no-ff dev
			/*
				Merge made by the 'recursive' strategy.
				 a.txt | 2 ++
				 1 file changed, 2 insertions(+)
			*/
		   
		注意:
			1.no-ff和并完后,主动发起合并的分支会领先于被合并的分支一个commit版本
			2.no-ff 不会丢失分支信息
			3.被合并的分支也要进行fast-forward前进一步 ,两个分支指向于同一个commit

你可能感兴趣的:(git,git)