git之分支

分支
	分支:master分支、dev分支、功能分支、bug分支
     什么是分支:
        分支就是一条时间线,每次commit后,git会把所有commit串成一条时间线,这条时间线就是一个分支,分支上有节点,每个节点表示一个commit。
HEAD是一个指针,指向当前的分支。
          HEAD指向master,master指向commit,所以HEAD指向当前分支
        时间线的形成:
          一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点。
          每次提交后,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长
          
          

	为什么创建分支
		用分支完成你的,在分支上开发,然后合并到主分支上,这样不会影响主分支。
		因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。
	创建新分支:
		创建新分支
			git branch  dev ////dev是新分支的名字 
		创建新分支并切换到新分支
			git checkout -b dev //dev新分支的名字 
		 
	切换到想要的分支
		git checkout dev //dev是想要进入的分支的名字 
	查看当前分支
		git branch 
	删除分支
		git branch -d dev  	
	合并分支
		普通模式合并(推荐)
			合并后的历史有分支,能看出来曾经做过合并
				git merge --no-ff -m "merge with no-ff" dev		
		快速合并(不推荐)
			git merge dev  //当前在master分支上,把dev分支和master分支合并
			fast forward合并就看不出来曾经做过合并。所以不要用快速合
			git把master指向dev的当前提交,所以合并速度非常快。只有master没有变得时候可以这么干	
			
		解决冲突
			只能手动解决冲突
			当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
				
		查看git历史提交日志,图形化展示
			git log --graph //可以看到分支合并图
	临时保存当前分支的工作现场
		临时保存当前分支的工作现场
			临时保存当前分支的工作现场是什么意思?
				保存当前分支的工作现场,保存到硬盘中
				工作现场:包含当前分支的工作区,暂存区
			临时保存:
				git stash  //可以把当前分支的工作现场“储藏”起来,等以后恢复现场后继续工作:
				git stash list命令看看刚才的工作现场存到哪去了
		恢复分支
			方法2(推荐):     
				git stash pop//恢复的同时把stash内容也删了
			方法1 
				git stash apply //恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
				保存多个地方
				你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:
					$ git stash apply stash@{0}	
				当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
	推送分支到远程库
		推送分支上的内容,到远程库上
			git push origin master 推送master分支到远程库
				origin 是远程库的名字
				master 是本地的分支
			git push origin dev  推送dev分支到远程库
		创建新分支并切换到新分支,然后从远程库中拉取内容,然后关联远程库
			git checkout -b dev origin/dev 
		已经有分支,从远程库中拉取内容
			git pull
			git pull也失败了,原因是没有把本地dev分支与远程origin/dev分支的关联起来,根据提示,把dev和origin/dev关联起来
				把本地的dev和远程库中dev分支创建关联关系
				git branch --set-upstream-to=mayun/dev 

多人协作的工作模式通常是这样:
	首先,可以试图用git push origin branch-name推送自己的修改;
		如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
		如果合并有冲突,则解决冲突,并在本地提交;
		没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
		如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to=mayun/dev
		这就是多人协作的工作模式,一旦熟悉了,就非常简单
	
	本地新建的分支如果不推送到远程,对其他人就是不可见的;
	从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
     例子:

        你的小伙伴已经向origin/dev分支推送了他的提交,而碰巧你也对同样的文件作了修改,并试图推送

        推送失败,因为你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送

  

posted on 2019-02-23 16:11  悬剑  阅读(115)  评论(0编辑  收藏  举报

导航