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

    备注:

    本文转载参考于廖雪峰老师的博客Git教程。依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查看原文。

    知识点

    • 分支可以并行的管理版本,协同合作编写代码,在分支上完成工作,然后合并分支。

    • 查看分支和当前分支:git branch

    • 创建分支git branch <name>

    • 切换分支git checkout <name>

    • 创建并切换分支git checkout -b <name>

    • 合并指定分支到当前分支,git merge <name>

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

    分支管理

    分支类似于平行的多个支线。

    分支的作用:比如多人协作开发中,你开发的功能需要两周完成,第一周还没写完,如果提交,由于代码不完整,提交可能会导致别人不能干活,但是如果等代码全部写完再提交,又有丢失的风险。

    借助分支,你可以创建一个属于自己的分支,多个人各自在自己的分支上正常工作,互不影响,等到开发完成后,在一次性合并到原来的分支上,保证了安全、高效、协同、互补影响。

    Git分支的创建、切换、删除非常快,和文件多少无关。

    创建与合并分支

    版本回退中,Git的版本管理是将每次提交串成一条时间出现,这条时间线就是一个分支。

    目前创建的Git仓库只有一个分支——主分支,即master分支,

    HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

    开始,master 分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支和当前分支的提交点。

    master分支和head和提交

    每次提交,master分支都会向前移动一步,随着不断的提交,master分支的线也越来越长。

    当我们创建新的分支,比如dev分支,Git新建一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上。

    新dev分支和head和提交

    Git创建分支很快,因为Git只增加一个dev指针,同时修改HEAD的指向,工作区的文件都没有任何变化。

    现在对工作区的修改和提交就针对dev分支,比如新提交之后,dev指针往前移动,而master指针不变

    新dev分支和head和提交2

    当我们在dev上的工作完成了,就可以把dev合并到master上。

    Git的合并很简单,就是直接把master指向dev的当前提交,这就完成了合并。

    dev分支和master合并

    Git合并分支也很快,仅仅是改改指针,工作区内容不变。

    合并完分之后,如果删除dev分支只要把dev指针删除就可以

    只剩下一条master分支

    分支和master合并后删除dev分支

    创建分支。

    • 创建dev分支,并切换到dev分支
    $ git checkout -b dev
    切换到一个新分支 'dev'
    

    git checkout -b xx表示创建分支并切换。

    • 分步骤创建并切换分支dev2。如下
    $ git branch dev2
    $ git checkout dev2
    切换到分支 'dev2'
    
    • git branch查看当前分支
    $ git branch
      dev
    * dev2
      master
    

    git branch列出所有分支,当前分支前面有一个*号。

    • 现在可以在dev2分支上正常提交。如修改readme.txt文件。然后查看Git状态
    $ git status
    位于分支 dev2
    尚未暂存以备提交的变更:
      (使用 "git add <文件>..." 更新要提交的内容)
      (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
    
    	修改:     readme.txt
    
    修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
    

    提示当前分支位于dev2上,并且工作区readme.txt修改

    • 分支提交
    $ git add readme.txt
    $ git commit -m"modify readme.txt at branch"
    [dev2 03d07d2] modify readme.txt at branch
     1 file changed, 1 insertion(+)
    

    如上,在当前分支dev2上完成了提交。

    • dev2分支上提交完,切回master分支:
    $ git checkout master
    切换到分支 'master'
    您的分支与上游分支 'origin/master' 一致。
    liu@liu-virtual-machine:~/gitTest$ cat readme.txt
    
    `this is a test that I learn and use git version control system
    this is a beginning
    wofaidognyixie dognxi
    

    查看可以看到,readme.txt文件保持和修改前的一致。

    • 切换到dev2分支,可以看到dev2分支上内容为之前最新修改内容
    $ git checkout dev2
    切换到分支 'dev2'
    $ cat readme.txt
    
    `this is a test that I learn and use git version control system
    this is a beginning
    wofaidognyixie dognxi
    create two new branch
    

    合并分支

    • dev2分支内容合并到master分支(当前分支为master
    $ git merge dev2
    更新 036ced2..03d07d2
    Fast-forward
     readme.txt | 1 +
     1 file changed, 1 insertion(+)
    

    此时查看readme.txt内容,已经和dev2一样

    git merge命令用于合并指定分支到当前分支。

    注意,上面合并时提示Fast-forward,Git指示本次合并是“快进模式”,即把master指向dev2的当前提交,所以速度很快。

    删除分支

    • 删除dev2分支,合并完成后就可以放心的删除dev2分支了。
    $ git branch -d dev2
    已删除分支 dev2(曾为 03d07d2)。
    $ git branch
      dev
    * master
    

    删除后,查看branchdev2分支已经没有了。

    Git创建、合并和删除分支都非常快,所以Git鼓励使用分支完成某个任务,合并后再删除分支,效率高并且安全。

    作者: 代码迷途
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意原创文章必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    非原创文章若有需要,建议直接联系原文作者或保留声明情况下转载原文
  • 相关阅读:
    连接数据库方法
    jdbc加载驱动方法
    MySQL数据库事务隔离级别
    事务和JDBC事务隔离级别
    IO
    java中从键盘输入的三种方法
    Java IO流学习总结八:Commons IO 2.5-IOUtils
    Java IO流学习总结七:Commons IO 2.5-FileUtils
    Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter
    Java Code Examples
  • 原文地址:https://www.cnblogs.com/codemissing/p/git_branch_manage.html
Copyright © 2011-2022 走看看