zoukankan      html  css  js  c++  java
  • 5. Git 本地分支命令

    前言

    该文章只是记录了一些自己的见解,可能并不准确,只是为了学习时的一些记录,不喜勿喷,谢谢

    该文章,只要记录一些关于分支的使用笔记

    1. 什么是分支

    当我们每次commit之后,就会生成一个提交节点,而多个提交节点组成的链路,就叫做一个分支。每一个提交节点上都记录上了父节点唯一id,通过链表的形式从最后一个节点一直向前找,当我们创建好一个仓库后,就会给我们创建一个master分支,而master分支跟普通分支没有什么区别,只是在生产环境中,通常都作为线上分支。而我们的master作为一个指针,指向最后一个提交的提交节点,通过父id的方式,可以一直回溯到第一个提交节点。

    在当前分支中,有一个特殊的指针,叫做 HEAD,该指针通常指向当前分支的最后一个提交节点,可以说HEAD指向当前分支,也可以说HEAD指向master,因为如果是通过正常版本回退命令,或者新提交记录等方式,HEAD和master指针都会同步移动,两者指向同一点,但是如果使用checkout commit_id 的方式,HEAD就会执行一个游离的节点,此时 master和HEAD就不再是同一个节点了。

    假设现在在master上有多个提交节点,master执行最后一次提交,现在创建了新的分支dev,则此时,只是新创建了一个指针,指向了当前的节点,几乎没有任何成本,所以效率非常高。

    下面我们来看看,分支的一些列操作

    2. 如何查看分支列表,以及当前所处分支

    使用 git branch 命令

    使用 git branch 命令可以看到当前git中存在的所有分支,而且,可以通过 * 所处的分支行看到当前所处哪个分支。如下图

    [root@huangzb mygit]# git branch
    * master
    [root@huangzb mygit]#
     
    

    由上图可知,当前git中只有一个分支,就是 master,而且 master前面还有一个 * 号,标识着当前所处分支为 master分支。

    3. 如何创建新分支

    使用命令 git branch 分支命 的方式来创建新分支

    master是在我们创建的时候,git给我们创建的一个分支,我们现在来创建一个新的分支dev,来看看如何操作。如下图:

    [root@huangzb mygit]# git branch dev
    [root@huangzb mygit]# git branch
      dev
    * master
    [root@huangzb mygit]#
     
    

    从上图中,可以看到,通过 git branch 分支名 的方式创建了一个 新的 dev分支,然后通过 git branch后可以清晰的看到新添加的dev分支,且更加分明的看到当前所处的分支为 master

    4. 如何切换分支

    使用命令 git checkout 分支名 来进行切换分支

    可以使用命令 git checkout 分支名来进行分支的切换,操作如下图:

    [root@huangzb mygit]# git branch
      dev
    * master
    [root@huangzb mygit]#
    [root@huangzb mygit]# git checkout dev
    Switched to branch 'dev'
    [root@huangzb mygit]# git branch
    * dev
      master
    [root@huangzb mygit]#
     
    

    从上图可以看出,我们通过 git checkout dev 命令,将分支切换到了 dev分支

    注意,这里要注意点,虽然这里有多个分支,但是如果在其余分支修改了文件,且没有提交的话,那么修改的文件在所有分支皆可见

    什么意思呢,假设现在有两个分支,master和dev,dev实在master最新的节点中创建的,所以两者从数据上来说是一致的,那么现在在dev分支中修改一个文件,没有提交,那么在我们的认知里,就算没有提交,但也是在dev分支修改的,master上分支的文件应该不会受到影响。事实上,真的如此吗?我们来试试,操作如下图

    [root@huangzb mygit]# git checkout dev
    Switched to branch 'dev'
    [root@huangzb mygit]# git branch
    * dev
      master
    [root@huangzb mygit]# echo 'a' > a.txt
    [root@huangzb mygit]# git status
    # On branch dev
    # Changes not staged for commit:
    #   (use "git add <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working directory)
    #
    #       modified:   a.txt
    #
    no changes added to commit (use "git add" and/or "git commit -a")
    [root@huangzb mygit]# git checkout master
    M       a.txt
    Switched to branch 'master'
    [root@huangzb mygit]# git status
    # On branch master
    # Changes not staged for commit:
    #   (use "git add <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working directory)
    #
    #       modified:   a.txt
    #
    no changes added to commit (use "git add" and/or "git commit -a")
    [root@huangzb mygit]#
    [root@huangzb mygit]# cat a.txt
    a
     
     
    

    由上图可知,我们在dev分支修改了 a.txt 文件,但是切换到master分支后,同样的可以看到 master也感知到了变化,且文件也修改了。这是为什么呢?

    我们只要记住,不管在哪里分支修改文件,其实都是对工作空间的副本进行操作,在没有提交commit之前,所有的操作都是共享的,只有提交后,才可以区分。

    注意,不是什么情况都可以切换分支成功,如果在不同分支中同一个文件内容不一样,如果修改了该文件,则不允许切换分支

    下面,我们来演示一下,如下图:

    [root@huangzb mygit]# git branch
      dev
    * master
    [root@huangzb mygit]# cat a.txt
    hello master
    [root@huangzb mygit]# git checkout dev
    Switched to branch 'dev'
    [root@huangzb mygit]# cat a.txt
    a
    [root@huangzb mygit]# echo 'hello dev' > a.txt
    [root@huangzb mygit]# cat a.txt
    hello dev
    [root@huangzb mygit]# git checkout master
    error: Your local changes to the following files would be overwritten by checkout:
            a.txt
    Please, commit your changes or stash them before you can switch branches.
    Aborting
    [root@huangzb mygit]#
     
    

    由上图可知,在master和dev分支上都有一个文件,a.txt,但是两个分支的相同文件内容不一样,在dev分支中修改了该文件,没有提交,此时,再次切换分支,提示切换失败,必须操作后才可以切换,要么提交,要么还原,要么使用 stash命令暂存,否则不允许切换。

    5. 如何删除分支

    使用 git branch -d 分支名 的方式来删除指定分支

    我们可以通过 git branch -d 的方式来删除指定分支,但是有以下疑问?

    1. 是否可以删除当前所处分支

    下面我们来验证后,看看结果

    5.1 是否可以删除当前所处分支

    我们当前所处master分支,我们来看看能否删除所处分支,操作如下:

    [root@huangzb mygit]# git branch
      dev
    * master
    [root@huangzb mygit]# git branch -d master
    error: Cannot delete the branch 'master' which you are currently on.
    [root@huangzb mygit]#
     
    

    从上图中,我们可以看出,删除当前所处分支是不允许的,因为如果删除了当前分支,git 不知道设置使用哪个分支,所以 git 是不允许删除当前所处分支的。

  • 相关阅读:
    网络通信之 字节序转换原理与网络字节序、大端和小端模式
    [C/C++]大小端字节序转换程序
    面向对象和面向过程的区别
    编译libjpeg
    地形系统lod
    c/c++ 代码中使用sse指令集加速
    个人作品- 蘑菇大战
    个人作品- 几何战争
    Obj格式模型 读取
    各大引擎矩阵的矩阵存储方式 ----行矩阵 or 列矩阵
  • 原文地址:https://www.cnblogs.com/duguxiaobiao/p/12691267.html
Copyright © 2011-2022 走看看