• Git 分支操作


    在这里插入图片描述

    什么是分支

    在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独 分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时 候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是 一个单独的副本。(分支底层其实也是指针的引用)。

    在这里插入图片描述

    分支的好处

    同时并行推进多个功能开发,提高开发效率。

    各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

    分支的操作

    命令名称作用
    git branch 分支名创建本地分支
    git branch -d 分支名删除本地分支
    git push <主机名> -d <分支名>删除远程分支,主机名不填默认是origin
    git branch -v查看本地分支+上次提交的信息
    git branch -vv查看本地分支+上次提交的信息+本地和远程分支的关系
    git branch -vv -a查看本地分支+上次提交的信息+本地和远程分支的关系+远程分支(如果不想显示提交的信息,也可以去掉-vv参数)
    git branch -r只查看远程分支
    git checkout 分支名切换本地分支
    git checkout -b 分支名创建本地分支并切换
    git merge 分支名把指定的分支合并到当前分支上
    git branch -m 旧分支名 新分支名修改本地分支名称

    查看分支

    1)基本语法

    git branch -v

    2)案例实操
    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master)
    $ git branch -v
    * master 7f64f7b first commit!
    
    • 1
    • 2
    • 3

    创建分支

    1)基本语法

    git branch 分支名

    2)案例实操
    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master)
    $ git branch hot-fix
    
    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master)
    $ git branch -v
      hot-fix 7f64f7b first commit!
    * master  7f64f7b first commit!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    刚创建的新的分支,并将主分支 master 的内容复制了一份

    修改分支

    在 maste 分支上做修改(添加master test!)

    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master)
    $ vim hello.txt
    
    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master)
    $ git add hello.txt
    
    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master)
    $ git commit -m "my third commit" hello.txt
    [master d3fa9de] my third commit
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master)
    $ git branch -v
      hot-fix 7f64f7b first commit!
    * master  d3fa9de my third commit
    
    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master)
    $ cat hello.txt
    hello, git!!!
    hello, git!!!
    hello, git!!! master test!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    当前 master 分支已更新为最新一次提交的版本,hot-fix 分支并未做任何改变

    切换分支

    1)基本语法

    git checkout 分支名

    2)案例实操
    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master)
    $ git checkout hot-fix
    Switched to branch 'hot-fix'
    
    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (hot-fix)
    $ git branch -v
    * hot-fix 7f64f7b first commit!
      master  d3fa9de my third commit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    查看 hot-fix 分支上的文件内容发现与 master 分支上的内容不同

    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (hot-fix)
    $ cat hello.txt
    hello, git!!!
    hello, git!!!
    hello, git!!!
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在 hot-fix 分支上做修改(添加hot-fix test!)

    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (hot-fix)
    $ vim hello.txt
    
    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (hot-fix)
    $ cat hello.txt
    hello, git!!!
    hello, git!!!
    hello, git!!!hot-fix test!
    
    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (hot-fix)
    $ git add hello.txt
    
    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (hot-fix)
    $ git commit -m "hot-fix commit" hello.txt
    [fot-fix 7164176] hot-fix commit
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    查看日志

    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (hot-fix)
    $ git reflog
    7164176 (HEAD -> hot-fix) HEAD@{0}: Branch: renamed refs/heads/fot-fix to refs/heads/hot-fix
    7164176 (HEAD -> hot-fix) HEAD@{2}: commit: hot-fix commit
    7f64f7b HEAD@{3}: checkout: moving from master to fot-fix
    d3fa9de (master) HEAD@{4}: commit: my third commit
    7f64f7b HEAD@{5}: reset: moving to 7f64f7b
    bd40f0e HEAD@{6}: commit: second commit!
    7f64f7b HEAD@{7}: commit (initial): first commit!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    合并分支

    1)基本语法

    git merge 分支名

    2)案例实操

    在 master 分支上合并 hot-fix 分支

    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (hot-fix)
    $ git checkout master
    Switched to branch 'master'
    
    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master)
    $ git merge hot-fix
    Auto-merging hello.txt
    CONFLICT (content): Merge conflict in hello.txt
    Automatic merge failed; fix conflicts and then commit the result.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    此处合并失败,产生冲突

    产生冲突

    冲突产生的表现:后面状态为 MERGING

    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master|MERGING)
    $ cat hello.txt
    hello, git!!!
    hello, git!!!
    <<<<<<< HEAD
    hello, git!!! master test!
    =======
    hello, git!!!hot-fix test!
    >>>>>>> hot-fix
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    冲突产生的原因:合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git 无法替我们决定使用哪一个。必须人为决定新代码内容。

    查看状态(检测到文件有两处修改)

    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master|MERGING)
    $ git status
    On branch master
    You have unmerged paths.
      (fix conflicts and run "git commit")
      (use "git merge --abort" to abort the merge)
    
    Unmerged paths:
      (use "git add ..." to mark resolution)
            both modified:   hello.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    git merge --abort命令是回到解决冲突之前的状态

    解决冲突

    1)编辑有冲突的文件,删除特殊符号,决定要使用的内容

    特殊符号:<<<<<<< HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>> hot-fix

    此处两个修改均保留。

    hello, git!!!
    hello, git!!!
    hello, git!!! master test!
    hello, git!!!hot-fix test!
    
    • 1
    • 2
    • 3
    • 4

    vim中,按esc退出编辑模式后,按dd删除当前行,按u撤销上回操作

    2)添加到暂存区

    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master|MERGING)
    $ git add hello.txt
    
    • 1
    • 2

    3)执行提交(发现后面 MERGING 消失,变为正常)

    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master|MERGING)
    $ git commit -m "merge hot-fix"
    [master f5c8cbf] merge hot-fix
    
    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master)
    $ git status
    On branch master
    nothing to commit, working tree clean
    
    Aiw@DESKTOP-2K268H6 MINGW64 /e/Git-Space/git-demo (master)
    $ cat hello.txt
    hello, git!!!
    hello, git!!!
    hello, git!!! master test!
    hello, git!!!hot-fix test!
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    注意:此时使用 git commit 命令时不能带文件名,否则报错,因为不知道要提交哪个同名文件

    合并成功后,被合并的分支内容不会修改

    创建分支和切换分支图解

    在这里插入图片描述

    master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由 HEAD 决定的。所以创建分支的本质就是多创建一个指针。

    HEAD 如果指向 master,那么现在就在 master 分支上。

    HEAD 如果执行 hotfix,那么现在就在 hotfix 分支上。

    所以切换分支的本质就是移动 HEAD 指针。

  • 相关阅读:
    海外媒体发稿:葡萄牙-实现高效媒体软文发稿计划-大舍传媒
    vscode交叉编译cmake工程,toolchains设置
    localhost与127.0.0.1和本机ip的区别
    [ 环境搭建篇 ] docker 搭建部署 YAPI 框架
    Burp Suite详解
    Android网络监听
    英语——分享篇——每日100词——701-800
    扩大图片手势的点击范围的方法
    总结一次系统底层学习笔记
    如何使用iPhone15在办公室观看家里电脑上的4k电影,实现公网访问本地群晖!
  • 原文地址:https://blog.csdn.net/qq_45917176/article/details/126216681