1、分支管理: git
分支在实际中有什么用呢?假设你准备开发一个新功能,可是须要两周才能完成,第一周你写了50%的代码,若是马上提交,因为代码还没写完,不完整的代码库会致使别人不能干活了。若是等代码所有写完再一次提交,又存在丢失天天进度的巨大风险。如今有了分支,就不用怕了。你建立了一个属于你本身的分支,别人看不到,还继续在原来的分支上正常工做,而你在本身的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工做。 安全
1. 建立与合并分支: app
1)建立dev分支,而后切换到dev分支:git checkout命令加上-b参数表示建立并切换,而后,用git branch命令查看当前分支。git branch命令会列出全部分支,当前分支前面会标一个*号。而后,就能够在dev分支上正常提交。 spa
$ git checkout -b dev
2)
切换回master
分支后,提交在dev分支上的内容并无添加到master分支上,
把dev
分支的工做成果合并到master
分支上:git merge
命令用于合并指定分支到当前分支。
3)合并完成后,就能够放心地删除dev分支了: 指针
$ git branch -d dev
4)
由于建立、合并和删除分支很是快,因此Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master
分支上工做效果是同样的,但过程更安全。
查看分支:git branch code
删除分支:git branch -d <name> orm
合并某分支到当前分支:git merge <name> 开发
建立+切换分支:git checkout -b <name> rem
切换分支:git checkout <name> 同步
建立分支:git branch <name>
2、解决冲突
1. 分支管理策略:一般,合并分支时,若是可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
若是要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就能够看出分支信息。
$ git merge --no-ff -m "merge with no-ff" dev
在实际开发中,咱们应该按照几个基本原则进行分支管理:
首先,master分支应该是很是稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,好比1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每一个人都在dev分支上干活,每一个人都有本身的分支,时不时地往dev分支上合并就能够了。
2. bug分支:当接到一个修复一个代号101的bug的任务时,很天然地想建立一个分支issue-101来修复它,可是,等等,当前正在dev上进行的工做尚未提交,Git提供了一个stash功能,能够把当前工做现场“储藏”起来,等之后恢复现场后继续工做。($git stash),bug修复完成以后能够回到dev分支使用一下命令恢复工做现场:
另外一种方式是用git stash pop,恢复的同时把stash内容也删了
$ git branch -D feature-vulcan
4. 远程:当从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,而且,远程仓库的默认名称是origin。要查看远程库的信息,用git remote。
$ git push origin master
并非必定要把本地分支往远程推送:
master分支是主分支,所以要时刻与远程同步;
dev分支是开发分支,团队全部成员都须要在上面工做,因此也须要与远程同步;
bug分支只用于在本地修复bug,就不必推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合做在上面开发。
$ git checkout -b dev origin/dev
如今,他就能够在dev上继续修改,而后,时不时地把dev分支push到远程。 $ git push origin dev
推送失败,由于你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示咱们,先用git pull把最新的提交从origin/dev抓下来,而后,在本地合并,解决冲突,再推送。 $ git pull
$ git branch --set-upstream dev origin/dev
5. 多人协做的工做模式一般是这样:
首先,能够试图用git push origin branch-name推送本身的修改;
若是推送失败,则由于远程分支比你的本地更新,须要先用git pull试图合并;
若是合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
若是git pull提示“no tracking information”,则说明本地分支和远程分支的连接关系没有建立,用命令git branch --set-upstream branch-name origin/branch-name。
3、标签管理:发布一个版本时,一般先在版本库中打一个标签,这样,就惟一肯定了打标签时刻的版本。未来不管何时,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。因此,标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(可是分支能够移动,标签不能移动)