【Git教程】Git教程之分支管理

  在前一篇文章中,主要针对Git本地仓库和远程仓库的基本操作命令进行了简要介绍,本文主要集中介绍Git的另一个主要的特点:分支管理和多人协作。

什么是分支管理

  当一个任务需要多人协作完成时,每个人可以创建一个属于自己的分支,只有自己可以看到,每个人在自己的分支上完成修改提交等任务,最终开发完毕时,将每个人的分支合并到原来的主分支,这样可以互不影响,并且保证了安全。

创建和合并分支

  在一开始,git仓库只有一个主分支(master),HEAD指向master,master指向最新的提交;当创建了一个新的分支(比如叫dev)后,增加一个类似于master的指针dev,并且更改HEAD指向dev。

![](https://img2018.cnblogs.com/blog/1608161/201904/1608161-20190410102159504-216886549.png)

  这样,当在当前分支修改时,就是在移动dev指针,最后可以通过合并将分支合并到master分支。

使用命令如下:
创建分支: $ 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分支应该相对稳定,每个人的工作在自己的分支上完成。

![](https://img2018.cnblogs.com/blog/1608161/201904/1608161-20190410102224352-1262130080.png)

Bug分支和Feature分支

这两个分支主要是在软件开发中使用。

  • Bug分支:当要修复软件开发中的一个Bug时,一个很好的办法是通过创建一个新的分支来进行修复,修复完成后进行合并,删除Bug分支,而如果当前手头工作还没有完成时,可以先使用命令git stash将工作现场进行保存,然后去分支里修复bug,修复完成后,再通过git stash pop恢复工作现场。
  • Feature分支: 当软件开发中临时增加一个新功能时,同样最好的办法是用一个新的分支来进行开发,完成后再合并,类似于Bug分支,如果想要丢弃一个没有被合并过的分支,可以通过命令git branch -D <branch_name>来强行删除。

多人协作

多人协作的工作模式:

  • 首先,可以试图用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使用相关的分支管理和标签管理进行了记录,实践出真知,多练习使用才是最佳途径!

参考链接

廖雪峰的官方网站

菜鸟教程

上一篇:Git教程之分支管理之二


下一篇:CTF---安全杂项入门第三题 这是捕获的黑客攻击数据包,Administrator用户的密码在此次攻击中泄露了,你能找到吗?