Git基础学习之分支基本操作详解

目录
  • 1、创建分支
    • (1)创建分支
    • (2)图示理解
  • 2、查看分支列表
  • 3、分支切换
  • 4、查看所有分支的最后一个提交
  • 5、删除分支

1、创建分支

(1)创建分支

Git 是怎么创建新分支的呢?

很简单,就是要创建一个可以移动的新的指针。

比如,创建一个testing分支, 你需要使用命令:git branch testing

示例:

# 1.查看本地版本库历史提交
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git log --oneline
b97ccfd (HEAD -> master) 第3次提交,新增内容:branch test v3
f72a9fe 第2次提交,新增内容:branch test v2
fa2439a 第1次提交,新增readme.txt文件

# 2.新建分支testing
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git branch testing

# 3.再次查看本地版本库历史提交
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git log --oneline
b97ccfd (HEAD -> master, testing) 第3次提交,新增内容:branch test v3
f72a9fe 第2次提交,新增内容:branch test v2
fa2439a 第1次提交,新增readme.txt文件

可以看到(HEAD -> master, testing),说明本地版本库中,已经多了一个testing分支。

(2)图示理解

如上操作,会在当前所在的提交对象上创建一个新的指针。

如下图:

那么Git 又是怎么知道当前在哪一个分支上呢? 也很简单,它有一个名为 HEAD 的特殊指针,HEAD指向当前所在的本地分支上。

在本例中,是仍然在 master 分支上。 因为 git branch 命令仅仅 创建 一个新分支,并不会自动切换到新分支中去。

因为上面日志信息:(HEAD -> master, testing),也说明HEAD指针指向的是master分支。

如下图所示:

如图所示,当前 master 和 testing 分支均指向校验和以 b97ccfd 开头的提交对象。

2、查看分支列表

执行命令:git branch。不用加任何参数。

如下图:

该命令会列出当前本地版本库中存在的所有分支,且当前正在工作的分支前会显示*

和命令行路径后面( )中的内容相对应。

3、分支切换

要切换到一个已存在的分支,你需要使用 git checkout branchname 命令。

我们现在切换到新创建的 testing 分支去:

# 1.切换到testing分支上
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git checkout testing
Switched to branch 'testing' # 提示:切换到分支“testing”

# 2.查看当前正在工作的分支。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) # 这里
$ git branch
  master
* testing   # 这里

现在 HEAD 就指向 testing 分支了。(即:HEAD 会指向当前所在的分支)

提示:

在创建分支的时候,添加-b选项,可以直接切换到新创建的分支上。

例如:git checkout -b testing

该命令等价于如下两条命令:

  • git branch testing:创建分支。
  • git checkout testing:切换分支。

4、查看所有分支的最后一个提交

使用git branch -v命令可以查看,所有分支的最后一次提交。

我们在testing 分支修改readme.txt文件,再进行一次提交。

# 1.查看当前工作的分支
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)
$ git branch
  master
* testing

# 2.修改文件,提交新版本
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)
$ echo "branch test v4" >> readme.txt

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)
$ git commit -a -m '第4次提交,新增内容:branch test v4'
warning: LF will be replaced by CRLF in readme.txt.
The file will have its original line endings in your working directory
[testing 25f0827] 第4次提交,新增内容:branch test v4
 1 file changed, 1 insertion(+)

# 3.查看所有分支的最后一次提价
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)
$ git branch -v
  master  b97ccfd 第3次提交,新增内容:branch test v3
* testing 25f0827 第4次提交,新增内容:branch test v4

# 4.查看版本库历史提交记录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)
$ git log --graph --oneline
* 25f0827 (HEAD -> testing) 第4次提交,新增内容:branch test v4
* b97ccfd (master) 第3次提交,新增内容:branch test v3
* f72a9fe 第2次提交,新增内容:branch test v2
* fa2439a 第1次提交,新增readme.txt文件

通过上面的日志信息,此时 HEAD 指针的状态如下图:

可以看到 HEAD 随着在testing 分支上的提交操作,自动向前移动。

5、删除分支

使用命令:git branch -d branchname

但是要注意的是:若要删除某分支,必须要保证当前工作的分支,不能是该分支。

这个时候我们需要先切换回master分支。

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)
$ git checkout master
Switched to branch 'master'

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git branch
* master
  testing

此时 HEAD 指针的状态如下图:

说明:git checkout master这条命令做了两件事。

是使 HEAD 指回 master 分支。

是将工作目录中文件,恢复成 master 分支所指向提交的快照内容。

在切换分支时,一定要注意你工作目录里的文件会被改变,你的工作目录会恢复到该分支最后一次提交时的样子。如果 Git 不能干净利落地完成这个任务,它将禁止切换分支。(下面分支实战中有详细说明)

也就是说,你现在做修改的话,项目将始于 master 分支版本。 本质上来讲,这就是忽略 testing分支所做的修改,以便于向另一个方向进行开发。

继续我们开始删除 testing 分支。

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git branch -d testing
error: The branch 'testing' is not fully merged.
If you are sure you want to delete it, run 'git branch -D testing'.

提示你:分支“testing”没有合并到主分支,如果确定要删除它,请运行git branch -D testing命令。。

所以我们使用-D选项删除 testing 分支。

# 1.删除分支
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git branch -D testing
Deleted branch testing (was 25f0827).

# 2.查看本地库中的分支,就只有master分支了
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git branch
* master

# 3.查看提交历史记录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git log --graph --oneline
* b97ccfd (HEAD -> master) 第3次提交,新增内容:branch test v3
* f72a9fe 第2次提交,新增内容:branch test v2
* fa2439a 第1次提交,新增readme.txt文件
# 可以看到对testing分支的修改,只要没有合并,对master分支是没有影响的。

# 4.查看可回退的提交历史记录
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git reflog
b97ccfd (HEAD -> master) HEAD@{0}: checkout: moving from testing to master
25f0827 HEAD@{1}: commit: 第4次提交,新增内容:branch test v4
b97ccfd (HEAD -> master) HEAD@{2}: checkout: moving from master to testing
b97ccfd (HEAD -> master) HEAD@{3}: commit: 第3次提交,新增内容:branch test v3
f72a9fe HEAD@{4}: commit: 第2次提交,新增内容:branch test v2
fa2439a HEAD@{5}: commit (initial): 第1次提交,新增readme.txt文件

# 可以看到只要HEAD移动过,所有历史轨迹都会保留在Git版本库中。
# (也就是.git/objects目录中的文件只能无限的增多,存储了就不会删除掉。)

提示:合并后的分支不仅无用,它的存在还会引起不必要的麻烦,一般都会删除无用的分支。

以上就是Git基础学习之分支基本操作详解的详细内容,更多关于Git分支基本操作的资料请关注我们其它相关文章!

(0)

相关推荐

  • Git基础学习之标签tag的使用详解

    目录 1.标签介绍 2.列出标签 3.创建标签 (1)标签的分类 (2)附注标签 (3)轻量标签 4.后期打标签 1.标签介绍 软件的某个发行版本所对应的,其实就是软件开发过程中,某一个阶段的最后一次git commit提交.我们知道每一个提交操作,对应的都会生成一个commit-id,而标签就是与某一个commit-id绑定的名称.一个标签一旦与某一个commit-id绑定,那么该标签就不能修改绑定到其它commit-id了,除非将该标签删除后才可以与其commit-id绑定. 标签对象(ta

  • Git常用场景使用之分支操作

        1. 拉取推送分支: ​    git branch 分支名 : 创建分支 ​    git checkout 分支名 : 切换分支 ​    git checkout –b 分支名 : 创建并切换到新分支 ​    本地拉取分支后推送到远程: ​        git push <远程主机名> <本地分支名>:<远程分支名>         [注意]直接git push 会将当前本地分支推送到对应远端同名分支,如果远端没有同名分支则会新建同名分支     ​ 

  • Git基础学习之文件删除操作命令详解

    目录 1.删除文件说明 2.删除文件操作 (1)仅删除暂存区的文件 (2)完全删除文件 3.本文用到的命令总结 1.删除文件说明 在Git工作目录中要删除某个文件,首先要清楚该文件所处的状态. 若要是该文件未被Git管理,在工作区直接进行删除即可.(不演示) 但是,若该文件已经经过多次git add与git commit操作后,就必须要从已跟踪文件清单中删除(确切地说,是在暂存区中删除),然后提交. 可以用git rm命令完成此项工作,并连带从工作目录中删除指定的文件,这样文件之后就不会出现在未

  • Git基础学习之tag标签操作详解

    目录 共享标签 推送本地的指定标签 推送本地所有为推送的标签 查看结果 删除标签 删除本地标签 删除远程标签 修改标签指定提交的代码 标签在.git目录中的位置 本文中所使用到的命令 共享标签 默认情况下,git push 命令并不会传送标签到远程仓库服务器上. 在创建完标签后,你必须显式地(手动)推送标签到远程服务器上. 需要将标签推送到远程版本库作为一个发行版本,可以通过以下两种方式: 推送本地的指定标签 这个过程就像共享远程分支一样,你可以执行命令: git push origin <ta

  • git分支(branch)操作相关命令及分支命令的使用

    分支(branch)操作相关命令 查看本地分支:$ git branch 查看远程分支:$ git branch -r 创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支 切换分支:$ git checkout [name] 创建新分支并立即切换到新分支:$ git checkout -b [name] 删除分支:$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的.如果想强

  • git分支的创建、切换、合并及删除操作小结

    一.查看现存分支 查看现存分支 : git branch命令; git branch 从结果可以看出, 现在只有一个分支master; 二.创建分支 创建分支 : git branch 分之名称, 就可以创建一个分支, 创建完分支以后可以查看分支, 当前使用的分支会显示成为绿色, 前面带有 "*" , 如果不是当前使用的分支, 显示的是白色, 并且没有 "*" 前缀; git branch branch1 三.切换分支 切换分支 : git checkout 分支名

  • Git基础学习之分支基本操作详解

    目录 1.创建分支 (1)创建分支 (2)图示理解 2.查看分支列表 3.分支切换 4.查看所有分支的最后一个提交 5.删除分支 1.创建分支 (1)创建分支 Git 是怎么创建新分支的呢? 很简单,就是要创建一个可以移动的新的指针. 比如,创建一个testing分支, 你需要使用命令:git branch testing. 示例: # 1.查看本地版本库历史提交 L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master) $ gi

  • Git基础学习之分支操作的示例详解

    目录 1.新建一个分支并且使分支指向指定的提交对象 2.思考 3.项目分叉历史的形成 4.分支的总结 1.新建一个分支并且使分支指向指定的提交对象 使用命令:git branch branchname commitHash. 我们现在本地库中只有一个 master 分支,并且在 master 分支有三个提交历史. 需求:创建一个 testing 分支,并且testing 分支指向 master 分支第二个版本. # 1.查看提交历史记录 L@DESKTOP-T2AI2SU MINGW64 /j/

  • Java基础之switch分支结构详解

    一.基本语法 二.流程图 1.画出 swtich 出流程 2.案例说明流程图 三.快速入门 案例:Switch01.java 请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g a 表示星期一,b 表示星期二 - 根据用户的输入显示相应的信息.要求使用 switch 语句完成 代码: /* 案例:Switch01.java 请编写一个程序,该程序可以接收一个字符,比如:a,b,c,d,e,f,g a表示星期一,b表示星期二 - 根据用户的输入显示相应的信息.要求使用 swi

  • JavaScript基础学习之splice()函数详解

    目录 splice()函数详解 一.情况一(只有一个参数) 二.情况二 (两个参数) 三.情况三 (大于等于三个参数) 总结 splice()函数详解 splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. 注释:该方法会改变原始数组. 参数: index —— 必需.整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置.howmany —— 必需.要删除的项目数量.如果设置为 0,则不会删除项目.item1, …, itemX —— 可选.向数组添加的新项目. 返回

  • Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】

    本文实例讲述了Python基础学习之基本数据结构.分享给大家供大家参考,具体如下: 前言 相比于PHP,Python同样也是脚本解析语言,所以在使用Python的时候,变量和数据结构相对于编译语言来说都会简单许多,但是Python相比于PHP来说,变量类型的定义会比较严格:string->int的转换没有PHP那么方便.但这也让程序稳定性有所提升,例如和客户端交互的时候,数据库取出来的数字int和缓存取出来的数字(默认是string)需要手动进行转换(否则会有报错提示),而PHP不需要手动转换的

  • Java基础学习笔记之数组详解

    本文实例讲述了Java基础学习笔记之数组.分享给大家供大家参考,具体如下: 数组的定义于使用 1:数组的基本概念 一组相关变量的集合:在Java里面将数组定义为引用数据类型,所以数组的使用一定要牵扯到内存分配:想到了用new 关键字来处理. 2:数组的定义格式 区别: 动态初始化后数组中的每一个元素的内容都是其对应数据类型的默认值,随后可以通过下标进行数组内容的修改: 如果希望数组定义的时候就可以提供内容,则采用静态初始化的方式: a:数组的动态初始化(声明并初始化数组): 数据类型 数组名称

  • VUE3基础学习之click事件详解

    目录 1. 概述 2. click 事件 2.1 实现数字递减 2.2 事件方法中获取 event 对象 2.3 事件方法中增加参数 2.4 有参事件方法中获取 event 对象 2.5 点击按钮执行多个方法 2.6 事件冒泡 2.7 阻止冒泡 2.8 事件捕获 2.9 事件只执行一次 3. 综述 1. 概述 老话说的好:努力帮别人解决难题,你的难题也就不难解决了. 言归正传,今天我们来聊聊 VUE3 的 click 事件的相关知识. 2. click 事件 2.1 实现数字递减 <body>

  • Java OpenCV学习之Mat的基本操作详解

    目录 使用OpenCV时你需要补充的知识 Mat对象 Mat划线 Mat在己有图片上加圆圈 ImageShowAddCircle.java ImageViewer.java Mat与Image互转 OpenCVUtil.java Mat使用blur图片 环境好了,我们就可以进入正文了. 在之前入门一.二中分别已经有画图的两个例子了.但没有细节展开我们的代码和OpenCV到底在干什么. 使用OpenCV时你需要补充的知识 你需要熟练使用Java Swing,或者是其它任何一门语言中关于GUI方面的

随机推荐