美文网首页
git-分支1

git-分支1

作者: 脏脏包盛 | 来源:发表于2018-09-07 20:25 被阅读0次

    git branch 查看分支
    git branch dev 创建名字为dev的分支
    git checkout dev 切换分支
    git checkout -b dev创建并切换分支
    git merge dev 合并dev分支
    git branch -d dev 删除dev分支
    git log --graph --pretty=oneline --abbrev-commit 可以查看分支合并图
    git merge --no-ff -m "merge with no-ff" dev 可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

    创建和合并分支

    创建分支并转到dev分支

    git checkout -b dev
    

    相当于下面两个命令

    git branch dev
    git checkout dev
    

    查询分支

    git branch
    

    提交文档

    git add readme.txt
    git commit -m "add readme.txt"
    

    切换到master分支

    git checkout master
    

    合并dev分支并删除dev

    git merge dev
    git branch -d dev
    

    具体过程如下连接
    http://liaoxuefeng.gitee.io/git-resources/master-and-dev-ff.mp4

    解决冲突

    合并分支有时会有冲突,下面例子做演示
    创建并跳转分支

    git checkout -b feature1
    

    修改readme.txt为以下

    Creating a new branch is quick AND simple.
    

    在新分支做修改文件并提交,然后跳转回master分支

    git add readme.txt
    git commit -m “AND simple”
    git checkout master
    

    修改readme.txt为以下

    reating a new branch is quick & simple.
    

    在master上提交

    git add readme.txt
    git commit -m "& simple"
    

    合并两个分支

    $ git merge feature1
    Auto-merging readme.txt
    CONFLICT (content): Merge conflict in readme.txt
    Automatic merge failed; fix conflicts and then commit the result.
    

    发生冲突,需要解决合并问题,使用git status 查看冲突文件

    $ git status小姐
    On branch master
    Your branch is ahead of 'origin/master' by 2 commits.
      (use "git push" to publish your local commits)
    
    You have unmerged paths.
      (fix conflicts and run "git commit")
      (use "git merge --abort" to abort the merge)
    
    Unmerged paths:
      (use "git add <file>..." to mark resolution)
    
        both modified:   readme.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

    查看readme.txt内容

    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    Git has a mutable index called stage.
    Git tracks changes of files.
    <<<<<<< HEAD
    Creating a new branch is quick & simple.
    =======
    Creating a new branch is quick AND simple.
    >>>>>>> feature1
    

    对于上面冲突部分我们对其修改,再做提交。就可以解决冲突了。

    $ git add readme.txt 
    $ git commit -m "conflict fixed"
    [master cf810e4] conflict fixed
    

    用带参数的git log 也可以查看解决冲突情况

    $ git log --graph --pretty=oneline --abbrev-commit
    *   cf810e4 (HEAD -> master) conflict fixed
    |\  
    | * 14096d0 (feature1) AND simple
    * | 5dc6824 & simple小姐
    |/  
    * b17d20e branch test
    * d46f35e (origin/master) remove test.txt
    * b84166e add test.txt
    * 519219b git tracks changes
    * e43a48b understand how stage works
    * 1094adb append GPL
    * e475afc add distributed
    * eaadf4e wrote a readme file
    

    最后删除分支

    git branch -d feature1
    

    小结:
    当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
    解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
    用git log --graph命令可以看到分支合并图。

    分支管理策略

    正常合并分支使用的是fast forward模式,即调整指针合并。如果不使用这个模式,我们可以强制禁止这种模式,git就会在merge时生成新的commit,这样就能看到分支信息
    实战,使用--no-ff方式的git merge
    创建分支

    git checkout -b dev
    

    修改readme.txt提交

    $ git add readme.txt 
    $ git commit -m "add merge"
    [dev f52c633] add merge
     1 file changed, 1 insertion(+)
    

    现在,我们切换回master:

    $ git checkout master
    Switched to branch 'master'
    

    准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward:

    $ git merge --no-ff -m "merge with no-ff" dev
    Merge made by the 'recursive' strategy.
     readme.txt | 1 +
     1 file changed, 1 insertion(+)
    

    因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

    合并后,我们用git log看看分支历史:

    $ git log --graph --pretty=oneline --abbrev-commit
    *   e1e9c68 (HEAD -> master) merge with no-ff
    |\  
    | * f52c633 (dev) add merge
    |/  
    *   cf810e4 conflict fixed
    ...
    

    可以看到,不使用Fast forward模式,merge后就像这样:


    image.png
    分支策略

    在实际开发中,我们应该按照几个基本原则进行分支管理:
    首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
    那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
    你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
    所以,团队合作的分支看起来就像这样:


    image.png

    相关文章

      网友评论

          本文标题:git-分支1

          本文链接:https://www.haomeiwen.com/subject/xftfgftx.html