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

    参考链接

    廖雪峰的官方网站
    菜鸟教程

    博学 审问 慎思 明辨 笃行
  • 相关阅读:
    每个Java开发人员都应该知道的4个Spring注解
    JVM中的动态语言支持简介
    深入探索Java设计模式(五)之构建器模式
    Java——MVC模式
    程序出了问题,报错只能参考
    查看电脑端口占用情况
    Java——参数传递
    Python——关于定义过程
    Java——super的使用
    关于如何查看论文是否被SCI或者EI收录
  • 原文地址:https://www.cnblogs.com/gzshan/p/10681710.html
Copyright © 2020-2023  润新知