在前一篇文章中,主要针对Git本地仓库和远程仓库的基本操做命令进行了简要介绍,本文主要集中介绍Git的另外一个主要的特色:分支管理和多人协做。html
什么是分支管理
当一个任务须要多人协做完成时,每一个人能够建立一个属于本身的分支,只有本身能够看到,每一个人在本身的分支上完成修改提交等任务,最终开发完毕时,将每一个人的分支合并到原来的主分支,这样能够互不影响,而且保证了安全。git
建立和合并分支
在一开始,git仓库只有一个主分支(master),HEAD指向master,master指向最新的提交;当建立了一个新的分支(好比叫dev)后,增长一个相似于master的指针dev,而且更改HEAD指向dev。安全
<div align=center>  </div>网站
这样,当在当前分支修改时,就是在移动dev指针,最后能够经过合并将分支合并到master分支。spa
使用命令以下: 建立分支: $ git branch <branch_name> 切换分支: $ git checkout <branch_name> 建立+切换:$ git checkout -b <branch_name> 查看当前分支: $ git branch //列出全部分支,当前分支前加* 合并某分支到当前分支: $ git merge <branch_name> 删除分支: $ git branch -d <branch_name>
解决冲突
当Git没法自动合并分支时,就必须首先解决冲突,解决冲突之后再提交便可完成合并。 解决冲突就是把Git合并失败的文件手动编辑为咱们但愿的内容,而后再进行提交,使用git log --graph
能够看到分支合并图。指针
分支管理策略
Git的分支功能十分强大,在团队开发中应该充分应用,合并分支时,加上--no-ff 参数就能够用普通模式合并,合并后的历史有分支,能够看出来作过合并,而fast forward看不出来曾经作过合并。 团队合做时,master分支应该相对稳定,每一个人的工做在本身的分支上完成。code
<div align=center>  </div>orm
Bug分支和Feature分支
这两个分支主要是在软件开发中使用。htm
- Bug分支:当要修复软件开发中的一个Bug时,一个很好的办法是经过建立一个新的分支来进行修复,修复完成后进行合并,删除Bug分支,而若是当前手头工做尚未完成时,能够先使用命令
git stash
将工做现场进行保存,而后去分支里修复bug,修复完成后,再经过git stash pop
恢复工做现场。 - Feature分支: 当软件开发中临时增长一个新功能时,一样最好的办法是用一个新的分支来进行开发,完成后再合并,相似于Bug分支,若是想要丢弃一个没有被合并过的分支,能够经过命令
git branch -D <branch_name>
来强行删除。
多人协做
多人协做的工做模式:blog
- 首先,能够试图用
git push origin <branch-name>
推送本身的修改; - 若是推送失败,则由于远程分支比你的本地更新,须要先用
git pull
试图合并; - 若是合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用
git push origin <branch-name>
推送就能成功!
注意:若是git pull提示no tracking information,则说明本地分支和远程分支的连接关系没有建立,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
查看远程库信息的命令:git remote -v
推送本地分支的命令:git push origin <branch_name>
建立和远程库对应分支的命令:git checkout -b branch-name origin/branch-name
Rebase
- rebase操做能够把本地未push的分叉提交历史整理成直线;
- rebase的目的是使得咱们在查看历史提交的变化时更容易,由于分叉的提交须要三方对比。
标签管理
标签至关于版本库的一个快照,或者说是版本号的一个别名,和某个commit绑定在一块儿。
- 建立标签: 命令
git tag <tagname>
用于新建一个标签,默认为HEAD,也能够指定一个commit id;命令git tag -a <tagname> -m "blablabla..."
能够指定标签信息;命令git tag
能够查看全部标签。 - 操做标签: 命令
git push origin <tagname>
能够推送一个本地标签;命令git push origin --tags
能够推送所有未推送过的本地标签;命令git tag -d <tagname>
能够删除一个本地标签;命令git push origin :refs/tags/<tagname>
能够删除一个远程标签。
使用GitHub
- 在GitHub上,能够任意Fork开源仓库;
- 本身拥有Fork后的仓库的读写权限,能够推送pull request给官方仓库来贡献代码。
总结
本文主要针对Git使用相关的分支管理和标签管理进行了记录,实践出真知,多练习使用才是最佳途径!