0
点赞
收藏
分享

微信扫一扫

【Git版本控制管理】Git的杀手级特性 —— Git分支

回溯 2022-03-20 阅读 109
git分支git

Git的杀手级特性 —— Git分支

文章目录

  • Git分支本质是指向提交对象的可变指针。
  • Git默认分支名是master
    • 在每次提交操作之后都会有一个指向最后提交对象的master分支
    • master分支会在每次提交时自动向前移动

请添加图片描述

分支创建

  • 使用git branch命令

    # 分支创建
    git branch <分支名>
    
    # 比如创建分支dev
    git branch dev
    
    # 查看所有分支
    git branch
    
    # 删除分支
    git branch -d <分支名>
    

请添加图片描述

  • Git中特殊指针HEAD, 它指向当前所在的本地分支, 当你切换分支的时候HEAD指针也会指向指定的分支

  • Git分支只是创建了一个可以移动的新指针

  • git branch <分支名>命令只是创建了新分支, 并没有自动切换到新的分支中去

  • 新创建的分支和当前所在的分支所指的对象都是一样的, 不一样的是HEAD指针只指向当前所在的分支
    请添加图片描述

分支切换

  • 使用git checkout 命令

    # 切换分支
    git checkout <分支名>
    # 比如切换到dev分支
    git checkout dev
    
    # 新建分支并切换到该分支
    git checkout -b <分支名>
    

    请添加图片描述

  • 分支的切换本质就是HEAD指针指向对应的分支
    请添加图片描述

  • 在新的分支上进行开发,分支会向后移

    请添加图片描述

  • 切换到主分支进行另一个版本的开发

    请添加图片描述

需要注意的是两条分支的开发路线是不同的, 当然最后可以进行合并, 稍后再细说合并

  • 分支的切换需要留意工作目录和暂存区里那些还没有被提交的修改, 它可能会和切换到的分支产生冲突从而阻止 Git 切换到该分支, 需要将所有修改进行提交再切换分支

    请添加图片描述

  • 当切换分支的时候,Git 会重置工作目录,使其变回原来那个分支上最后一次提交的样子

    • Git 会自动添加、删除、修改文件以确保此时工作目录和这个分支最后一次提交时的样子一模一样

分支的合并

  • 使用git merge 命令进行合并

    # 先切换到合并入的分支
    git checkout <分支名>
    
    # 在将要合并的分支合并到该分支
    git merge <分支名> -m '提交说明'
    
    # 举个栗子将dev分支合并到master分支
    # 先切换到master分支
    git checkout master
    # 再合并dev分支
    git merge dev -m '将dev分支合并到master分支'
    
  • 假设一种情况是 master分支和dev分支在同一条开发线上

请添加图片描述

  • 因为此时的master分支和dev分支是在同一条开发线上, 也就是master分支可以顺着分支走到另一个分支, 那么在合并的时候, Git只会将master指针向前推进, 这种情况下没有需要解决的分歧, 这也叫做快进(fast-forward)

请添加图片描述

  • 另一种就是master分支和dev分支在不同的开发线上

    请添加图片描述

  • 合并分支就是

    请添加图片描述

  • 分支合并后, 被合并的分支并没有消失, 如果不需要该分支的话可以删除掉

    # 删除的分支
    git branch -d <分支名>
    
    # 比如删除dev分支
    git branch -s dev
    
  • 每次冲突合并都会记录到日志文件中, 可以通过git log 进行查看

遇到冲突的分支合并

  • 当冲突产生时, Git也会将不冲突的部分进行合并, 但是它不会自动创建一个新的合并进行提交, 而是暂停下来, 等待你解决冲突。

    • 使用git status可以查看那些未合并文件的状态(unmerge)
      请添加图片描述
  • 可以通过cat命令查看git为你标出的冲突文件

请添加图片描述

  • 也可以通过git mergetool, 启动可视化的合并工具, 这个本身就是vim编辑器

请添加图片描述

  • 修改完后使用git status进行查看是否已解决冲突
  • 然后可以使用git commit进行提交即可完成冲突合并

分支管理

  • git branch命令很有帮助

    # 列出所有分支
    git branch
    
    # 查看已合并到当前分支的分支
    git branch --merged
    
    # 查看未合并到当前分支的分支
    git branch --no-merged
    
    # 删除分支
    git branch -d
    # 强制删除分支
    git branch -D <分支名>
    

远程分支

  • 远程仓库的信息查看

    # 查看所连接的仓库
    git remote
    
    # 列出远程仓库引用的完整列表
    git ls-remote <remote>
    
    # 获取远程分支的信息
    git remote show <remote>
    

    比如 :
    请添加图片描述

  • 推送分支

    git push <remote> <branch>
    
  • 更新远程仓库的分支(即同步数据)

    # 从服务器上抓取本地没有的数据时,但并不会修改工作目录中的内容
    git fetch <remote>
    
    # 从服务器中抓取你需要同步的分支, 若有冲突则需要解决冲突才能覆盖到本地的工作目录中
    git pull <remote> <branch>
    
  • 删除远程分支

    git push <remote> --delete <branch>
    

举报

相关推荐

0 条评论