美文网首页
Git 笔记(六)创建合并分支、解决冲突

Git 笔记(六)创建合并分支、解决冲突

作者: 红发_SHANKS | 来源:发表于2018-07-11 13:55 被阅读11次

    为什么需要分支
    分支,就是一个完整的项目中,平行的几个代码仓库,开发的时候,多人分开开发,最后合并成完整的功能。
    分支可以使多人协作更加安全,不会因为每个人的进度和功能块不同儿相互影响。
    分支原理
    通常情况下,我们单分支管理项目代码的时候,只有 master 一个分支,每一次提交都是一个节点,master 则指向我们提交代码的节点,用于标记当前快照的 HEAD 就指向 master。

    假设我们创建新的分支 dev,那么就会多一个 dev 指针,指向我们提交代码的节点,HEAD 改为指向 dev ,所以 git 中创建分支是很快的。如果我们需要合并分支,那么重新用 master 指向我们提交代码的节点,HEAD 指向 master 就完成了,所以在 git 中 ,合并分支也是很轻松快速的。

    如果不再需要 dev 分支,则删除 dev 指针,代码没有任何变动。

    创建分支

    使用 git branch 查看分支情况

    $ git branch
    * master
    
    

    使用 git branch dev创建分支 和 git checkout dev切换分支。git checkout -b dev创建并且切换分支到 dev。

    $ git branch dev
    $ git checkout dev
    Switched to branch 'dev'
    M       README.md
    $ git branch
    * dev
      master
    
    

    使用 git branch 查看分支,我们发现现在有两个分支了,并且当前分支为 dev(当前分支前会加上 *)。

    在 dev 分支上修改 README 文件并且提交。

    $ git add .
    $ git commit -m "commit dev"
    [dev 1895051] commit dev
     1 file changed, 1 insertion(+), 1 deletion(-)
    $ git checkout master
    Switched to branch 'master'
    Your branch is up-to-date with 'origin/master'.
    
    

    此时我们去查看 README 文件,并没有我们刚才的修改内容,为什么呢?因为我们的修改是提交到了 dev 分支上面,而 master 分支没有做任何改动。

    合并分支

    合并 dev 分支到 master 分支。

    $ git merge dev
    Updating a6de0c0..1895051
    Fast-forward
     README.md | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    

    注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。再次查看 README 文件,我们刚才在 dev 分支上的修改出现了。

    分支已经合并完成,那么可以删除分支了。

    $ git branch -d dev
    Deleted branch dev (was 1895051).
    $ git branch
    * master
    
    

    现在又只剩下一个 master 分支了。

    总结
    Git鼓励大量使用分支:因为更加安全而不影响效率。

    查看分支:git branch

    创建分支:git branch <name>

    切换分支:git checkout <name>

    创建+切换分支:git checkout -b <name>

    合并某分支到当前分支:git merge <name>

    删除分支:git branch -d <name>

    解决冲突

    重新创建分支 dev , 修改 README 文件,提交。

    $ git checkout -b dev
    $ git add .
    $ git commit -m "commit dev"
    

    然后切换回master分支,修改 README 文件,提交。

    $ git checkout master
    $ git add .
    $ git commit -m "commit master"
    
    

    合并分支,重现冲突的情况。

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

    看看 README 文件中冲突的地方:

    <<<<<<< HEAD
    重现冲突的情况 master++
    =======
    重现冲突的情况 dev+
    >>>>>>> dev
    
    

    git 使用 <<< , ====, >>> 区分开冲突的文件。HEAD 表示当前分支。这时候,我们需要手动将冲突的地方进行修改,这里我们决定最终采用 重现冲突的情况 master++,删除文中的符号和我们丢弃的内容。

    重现冲突的情况 master++
    

    提交并且再次合并再次合并

    $ git add .
    $ git commit -m "merge"
    $ git log --graph
    *   commit f8302135fc340de7569d4df48f8ab2323025d7a2 (HEAD -> master)
    |\  Merge: 34ed366 fe4a7e8
    | | Author: Shanks <chentu_2011@163.com>
    | | Date:   Wed Jul 4 14:47:53 2018 +0800
    | |
    | |     merge
    | |
    | * commit fe4a7e852cbc69b82561ecdae14e86fbd1627a40 (dev)
    | | Author: Shanks <chentu_2011@163.com>
    | | Date:   Wed Jul 4 14:41:27 2018 +0800
    | |
    | |     dev
    | |
    * | commit 34ed366f6204012c3cbe3de8cda02f2380c3a440
    |/  Author: Shanks <chentu_2011@163.com>
    |   Date:   Wed Jul 4 14:42:18 2018 +0800
    |
    |       master
    
    

    使用 git log --graph 可以查看我们分支合并图。

    最后删除分支

    $ git branch -d dev
    Deleted branch dev (was fe4a7e8).
    
    

    总结
    当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

    解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

    相关文章

      网友评论

          本文标题:Git 笔记(六)创建合并分支、解决冲突

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