zoukankan      html  css  js  c++  java
  • Git管理分支

    在实际开发中,我们应该按照价格基本原则进行分制管理:
    首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
    那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
    你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
    所以,团队合作的分支看起来就像这样:
     
     
    当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
     
    那么从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交了一个修改后,dev指针往前移一步,而master的指针是不变的。
     
    假如我们已经在dev上完成了工作,就可以把dev合并到master上,如何合并?
    最简答的就是直接把master指向dev的当前提交,就完成了合并~
    如图:
    所以git的合并也很快,就改改指针,工作区内容不改变~
    合并完成后,甚至可以删除dev分支,删除后,就只剩下一条master分支了!
     
    实战:
    创建dev分支,并切换至dev分支:
    [root@VM-75-64 test]# ll
    total 8
    -rw-r--r-- 1 root root 9 May 15 11:41 readme.md
    -rw-r--r-- 1 root root 7 May 15 11:41 test.txt
    [root@VM-75-64 test]# pwd
    /root/test
    [root@VM-75-64 test]#
    [root@VM-75-64 test]#
    [root@VM-75-64 test]# git branch            #查看分支列表,* 所在的分支就是当前分支
    * master
    [root@VM-75-64 test]# git checkout -b dev    #相当于两步操作,git branch dev:创建分支;git checkout dev:切换分支
    Switched to a new branch 'dev'
    [root@VM-75-64 test]# git branch             # 成功切换至dev分支
    * dev
      master
    [root@VM-75-64 test]# ll                        #本地工作区的文件是不变的~
    total 8
    -rw-r--r-- 1 root root 9 May 15 11:41 readme.md
    -rw-r--r-- 1 root root 7 May 15 11:41 test.txt
    [root@VM-75-64 test]#
     
    此时我们在dev分支上正常提交:
    修改readme.md
    添加一行:
    [root@VM-75-64 test]# vim readme.md
    Git test
    Create a new branch is quick
    [root@VM-75-64 test]# git add readme.md
    [root@VM-75-64 test]# git commit -m 'branch test'
    [dev 3501a30] branch test
    1 files changed, 1 insertions(+), 0 deletions(-)
    [root@VM-75-64 test]# git status
    # On branch dev
    nothing to commit (working directory clean)
    [root@VM-75-64 test]#
     
    好,提交成功~
    此时dev的工作提交完成,我们切回master分支~
    [root@VM-75-64 test]# git checkout master
    Switched to branch 'master'
    [root@VM-75-64 test]# git status
    # On branch master
    nothing to commit (working directory clean)
    [root@VM-75-64 test]# git branch
      dev
    * master
    [root@VM-75-64 test]# ll
    total 8
    -rw-r--r-- 1 root root 9 May 15 14:42 readme.md
    -rw-r--r-- 1 root root 7 May 15 11:41 test.txt
    [root@VM-75-64 test]# cat readme.md                #切回master分支以后我们发现,readme.md还是原来的版本!
    Git test
     
    现在,我们把dev分支的成果合并到master分支上!
    [root@VM-75-64 test]# git merge dev            #git merge ***:就是把***分支的代码合并到当前分支的指令。
    Updating df4ceaf..3501a30
    Fast-forward                            #这里git告诉我们,这次合并是快进模式,也即是直接把master的HEAD指向到dev上!
    readme.md |    1 +                        #修改的目标文件
    1 files changed, 1 insertions(+), 0 deletions(-)    #具体的修改情况
    [root@VM-75-64 test]# cat readme.md
    Git test
    Create a new branch is quick                        #你会发现,dev的修改,已经合并到当前的master上了!
    [root@VM-75-64 test]#
     
    上面说到的快进模式,其实还有其他种的合并方式,后面在讲解。
    合并完成后,我们就能放心的删除dev分支了~
    [root@VM-75-64 test]# git branch
      dev
    * master
    [root@VM-75-64 test]# git branch -d dev
    Deleted branch dev (was 3501a30).
    [root@VM-75-64 test]# git branch
    * master                                        #ok,这里只剩下master分支了!
     
    好的,现在来看下除了fast forward模式的其他的模式:
    我们知道 Fast forward 模式在删除掉分支之后,会丢掉分支的信息,如果要强制禁用Fast forward 模式,就要在合并的回收加一个参数: --no-ff方式的git merge
     
    我们再重演下上面的步骤:
    [root@VM-75-64 test]# git checkout -b dev
    Switched to a new branch 'dev'
    [root@VM-75-64 test]# vim readme.md
    Git test
    Create a new branch is quick
    Create a new branch is quick and simple
    Ok let us deploy it together
    dev branch deploy
    [root@VM-75-64 test]# git add readme.md
    [root@VM-75-64 test]# git commit -m 'dev deploy'
    [dev 762a637] dev deploy
    1 files changed, 1 insertions(+), 0 deletions(-)
    [root@VM-75-64 test]# git checkout master          #切回master主分支
    Switched to branch 'master'
    Your branch is ahead of 'origin/master' by 10 commits.
    [root@VM-75-64 test]# ll
    total 8
    -rw-r--r-- 1 root root 107 May 15 18:12 readme.md
    -rw-r--r-- 1 root root   7 May 15 11:41 test.txt
    [root@VM-75-64 test]# cat readme.md
    Git test
    Create a new branch is quick
    Create a new branch is quick and simple
    Ok let us deploy it together
    [root@VM-75-64 test]# git merge --no-ff -m 'merge with --no-ff' dev            #这里使用了--no-ff参数,去把dev分支的代码合并到本地!
    Merge made by recursive.                                                       #这里没有提示fast forward 模式了!
    readme.md |    1 +
    1 files changed, 1 insertions(+), 0 deletions(-)
    [root@VM-75-64 test]# cat readme.md
    Git test
    Create a new branch is quick
    Create a new branch is quick and simple
    Ok let us deploy it together
    dev branch deploy
    [root@VM-75-64 test]# git log --graph --pretty=oneline --abbrev-commit
    *   eec652d merge with --no-ff
    |  
    | * 762a637 dev deploy
    |/  
     
    这里可以看到分支合并的信息...
    好的,这部分的内容也就到这里了!
    注意 git merge 的时候,使用--no-ff参数,同时 -m 加上备注信息。
     
    在这里,git鼓励用户大量使用分支,因为每一个分支都是master的一个缩影,在真实的企业环境中,大多也只是配置文件的不同,功能大多都是一样的!所以,这里多分支就相当于一个备份~
    Git分支十分强大,在团队开发中应该充分应用。
    合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史中会保留有分支记录,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
     
    总结下指令:
    查看分支:git branch
    创建分支:git branch <name>
    切换分支:git checkout <name>
    创建+切换分支:git checkout -b <name>
    合并某分支到当前分支:git merge <name>
    合并某分支到当前分支:git merge --no-ff -m '**' <name>
    删除分支:git branch -d <name>(已经合并过的分支)
     
    删除分支: git branch -D <name> (还没有合并到master的分支)
     
     以上,共勉!
     
     
  • 相关阅读:
    Java基础——链表的添加、移除、反转
    Java基础——数组队列的原理和实现
    Java基础——String、StringBuiler、StringBuffer的用法和区别
    Java基础——解决JFrame.setBackground设置无效,mac系统IDEA编译器
    Java基础——文件查找创建删除
    Java基础——Java异常机制
    线性表的操作
    Linux目录及文件系统操作
    Linux用户及文件权限管理
    Linux日志系统
  • 原文地址:https://www.cnblogs.com/storyawine/p/13408403.html
Copyright © 2011-2022 走看看