• Git分支管理


    分支管理

    git branch

    列出所有分支,当前分支前面会标一个*号

    $ git branch
    * dev
      master
    

    表示有两个分支,当前分支为dev。

    git branch命令的-r选项,可以用来查看远程分支,-a选项查看所有分支。

    $ git branch -r
    MyName/master
    
    $ git branch -a
    * master
      remotes/origin/master
    

    上面命令表示,本地仓库的当前分支是master,远程分支是origin/master。

    git branch命令的-d选项,用于删除分支(删除分支不能在 被删除分支上 进行)

    $ git branch -d test
    Deleted branch test (was 64fcede).
    

    git checkout <分支>

    切换分支

    $ git checkout -b dev origin/master
    

    上面命令表示,在origin/master的基础上,创建一个新分支并切换至新分支。git checkout命令加上-b参数表示创建并切换,即相当于:

    $ git branch dev //创建dev分支
    $ git checkout dev //切换到dev分支
    Switched to branch 'dev'
    

    git merge

    合并指定分支到当前分支

    $ git merge dev
    

    冲突情况

    当为dev进行新的一次提交,切换到master分支,会看到Git还会自动提示我们当前master分支比远程的master分支要超前1个提交。

    $ git checkout master
    Switched to branch 'master'
    Your branch is ahead of 'MyName/master' by 1 commit.
      (use "git push" to publish your local commits)
    

    接下来为master分支也进行一次新的提交,然后合并dev分支

    $ git merge dev
    Auto-merging 新建文本文档.txt
    CONFLICT (content): Merge conflict in 新建文本文档.txt
    Automatic merge failed; fix conflicts and then commit the result.
    

    可以看到git提示txt文件存在冲突,必须手动解决冲突后再提交。此时查看修改的txt

    $ cat 新建文本文档.txt
    123
    <<<<<<< HEAD
    master change
    =======
    dev change
    >>>>>>> dev
    

    Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容

    接下来对内容进行修改再提交

    git add *
    $ git commit -m'conflict fixed'
    [master a94df7f] conflict fixed
    

    分支合并情况可用带参数的git log查看
    image

    分支策略

    版本库的两条主要分支:Master和Develop。前者用于正式发布,后者用于日常开发。

    除了常设分支以外,还有一些临时性分支,用于应对一些特定目的的版本开发。临时性分支主要有三种:

    • 功能(feature)分支
    • 预发布(release)分支
    • 修补bug(fixbug)分支

    这三种分支都属于临时性需要,使用完以后,应该删除,使得代码库的常设分支始终只有Master和Develop。

    功能分支

    第一种是功能分支,它是为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop,然后删除feature分支。

    功能分支的名字,可以采用feature-*的形式命名。

    预发布分支

    它是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。

    预发布分支是从Develop分支上面分出来的,预发布结束以后,必须合并进Master和Develop分支,然后删除预发布分支。它的命名,可以采用release-*的形式。

    修补bug分支

    软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。

    修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支,然后删除bug分支。它的命名,可以采用fixbug-*的形式。

    bug分支特殊情形

    假如有个场景,在工作中,接到个bug修复任务,此时你正在dev进行的工作还没有提交也没办法提交(还未完成),注意,未提交状态下切换分支会将状态合并到切换分支。要想将dev正在进行的工作现场保存起来,就需要使用Git提供的 git stash

    $ git stash
    Saved working directory and index state WIP on dev: d5dd078 working
    

    查看工作区,可以看到是干净的

    $ git status
    On branch dev
    nothing to commit, working tree clean
    

    接下来,就要确定bug在哪个分支,切换到对应分支并创建临时分支

    $ git checkout master
    Switched to branch 'master'
    Your branch is ahead of 'MyName/master' by 11 commits.
      (use "git push" to publish your local commits)
    
    $ git checkout -b bug
    Switched to a new branch 'bug'
    

    完成修复bug后,切换到master分支接着完成合并,最后删除bug分支,bug修复工作便彻底结束。

    接下来就要回到原本的dev工作了

    git checkout dev
    

    之前的保存的工作现场就用git stash list进行查看

    $ git stash list
    stash@{0}: WIP on dev: d5dd078 working
    

    可以看到现场被保存在某个地方,接下来有两个方法恢复:

    一是用git stash apply,恢复后stash内容不删除,要删除的话需要用git stash drop命令

    二是用git stash pop,恢复的同时把stash内容删除。

    强行删除还未合并的分支

    假如你在开发一个新功能,最好新建一个feature分支,

  • 相关阅读:
    使用AStyle进行代码格式化
    ubuntu14.04设置静态ip
    网络模拟器WANem使用配置图文教程
    ServerSocket 默认邦定IP
    shell判断文件是否存在
    linux文本模式下使用PPPOE拨号ADSL上网的方法
    几个国内速度最快的centos yum(更新源)
    linux命令执行返回值(附错误对照表)
    如何在java程序中调用linux命令或者shell脚本
    windows多线程详解
  • 原文地址:https://www.cnblogs.com/y-dt/p/9748513.html
Copyright © 2020-2023  润新知