1、创建分支

(1)创建分支

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

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

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

示例:

  1. # 1.查看本地版本库历史提交
  2. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
  3. $ git log --oneline
  4. b97ccfd (HEAD -> master) 3次提交,新增内容:branch test v3
  5. f72a9fe 2次提交,新增内容:branch test v2
  6. fa2439a 1次提交,新增readme.txt文件
  7. # 2.新建分支testing
  8. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
  9. $ git branch testing
  10. # 3.再次查看本地版本库历史提交
  11. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
  12. $ git log --oneline
  13. b97ccfd (HEAD -> master, testing) 3次提交,新增内容:branch test v3
  14. f72a9fe 2次提交,新增内容:branch test v2
  15. fa2439a 1次提交,新增readme.txt文件

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

(2)图示理解

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

如下图:

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

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

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

如下图所示:

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

2、查看分支列表

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

如下图:

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

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

3、分支切换

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

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

  1. # 1.切换到testing分支上
  2. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
  3. $ git checkout testing
  4. Switched to branch 'testing' # 提示:切换到分支“testing”
  5. # 2.查看当前正在工作的分支。
  6. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing) # 这里
  7. $ git branch
  8. master
  9. * testing # 这里

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

提示:

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

例如:git checkout -b testing

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

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

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

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

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

  1. # 1.查看当前工作的分支
  2. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)
  3. $ git branch
  4. master
  5. * testing
  6. # 2.修改文件,提交新版本
  7. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)
  8. $ echo "branch test v4" >> readme.txt
  9. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)
  10. $ git commit -a -m '第4次提交,新增内容:branch test v4'
  11. warning: LF will be replaced by CRLF in readme.txt.
  12. The file will have its original line endings in your working directory
  13. [testing 25f0827] 4次提交,新增内容:branch test v4
  14. 1 file changed, 1 insertion(+)
  15. # 3.查看所有分支的最后一次提价
  16. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)
  17. $ git branch -v
  18. master b97ccfd 3次提交,新增内容:branch test v3
  19. * testing 25f0827 4次提交,新增内容:branch test v4
  20. # 4.查看版本库历史提交记录
  21. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)
  22. $ git log --graph --oneline
  23. * 25f0827 (HEAD -> testing) 4次提交,新增内容:branch test v4
  24. * b97ccfd (master) 3次提交,新增内容:branch test v3
  25. * f72a9fe 2次提交,新增内容:branch test v2
  26. * fa2439a 1次提交,新增readme.txt文件

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

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

5、删除分支

使用命令:git branch -d branchname

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

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

  1. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (testing)
  2. $ git checkout master
  3. Switched to branch 'master'
  4. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
  5. $ git branch
  6. * master
  7. testing

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

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

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

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

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

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

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

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

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

  1. # 1.删除分支
  2. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
  3. $ git branch -D testing
  4. Deleted branch testing (was 25f0827).
  5. # 2.查看本地库中的分支,就只有master分支了
  6. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
  7. $ git branch
  8. * master
  9. # 3.查看提交历史记录
  10. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
  11. $ git log --graph --oneline
  12. * b97ccfd (HEAD -> master) 3次提交,新增内容:branch test v3
  13. * f72a9fe 2次提交,新增内容:branch test v2
  14. * fa2439a 1次提交,新增readme.txt文件
  15. # 可以看到对testing分支的修改,只要没有合并,对master分支是没有影响的。
  16. # 4.查看可回退的提交历史记录
  17. L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
  18. $ git reflog
  19. b97ccfd (HEAD -> master) HEAD@{0}: checkout: moving from testing to master
  20. 25f0827 HEAD@{1}: commit: 4次提交,新增内容:branch test v4
  21. b97ccfd (HEAD -> master) HEAD@{2}: checkout: moving from master to testing
  22. b97ccfd (HEAD -> master) HEAD@{3}: commit: 3次提交,新增内容:branch test v3
  23. f72a9fe HEAD@{4}: commit: 2次提交,新增内容:branch test v2
  24. fa2439a HEAD@{5}: commit (initial): 1次提交,新增readme.txt文件
  25. # 可以看到只要HEAD移动过,所有历史轨迹都会保留在Git版本库中。
  26. # (也就是.git/objects目录中的文件只能无限的增多,存储了就不会删除掉。)

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

『现学现忘』Git分支 — 40、分支基本操作(一)的更多相关文章

  1. 『现学现忘』Git分支 — 38、Git分支介绍

    目录 1.Git分支简介 2.Git分支与SVN分支的区别 3.工作中为什么要使用分支 4.Git分支管理的好处 1.Git分支简介 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着,你可 ...

  2. 『现学现忘』Git分支 — 41、分支基本操作(二)

    目录 6.新建一个分支并且使分支指向指定的提交对象 7.思考: 8.项目分叉历史的形成 9.分支的总结 提示:接上篇 6.新建一个分支并且使分支指向指定的提交对象 使用命令:git branch br ...

  3. 『现学现忘』Git基础 — 5、Git的协作模式

    目录 1.分布式工作流程 2.集中式工作流 3.分支工作流 4.GitFlow 工作流(最流行) 5.Forking 工作流(偶尔使用) 6.总结 1.分布式工作流程 与传统的集中式版本控制系统(CV ...

  4. 『现学现忘』Git后悔药 — 27、版本回退介绍

    目录 1.什么版本回退 2.需要了解两个知识点 (1)HEAD是什么 (2)HEAD指针用法 3.git reflog命令介绍 1.什么版本回退 版本回退也可以叫回滚. 若修改过的文件,不仅添加到了暂 ...

  5. 『现学现忘』Git分支 — 39、Git中分支与对象的关系

    目录 1.Git对象之间的关系 2.提交对象与分支的关系 (1)提交对象与分支的关系 (2)分支说明 (3)HEAD与分支的关系 1.Git对象之间的关系 我们之前学了Git的三个对象:提交对象.树对 ...

  6. 『现学现忘』Git对象 — 16、Tree对象详解

    目录 1.Tree对象介绍 2.Tree对象说明 (1)初始化一个新的本地版本库 (2)创建一个树对象(重点) (3)创建第二个文件(重点) (4)将第一个树对象加入暂存区,使其成为新的树对 3.总结 ...

  7. 『现学现忘』Git基础 — 21、git diff命令

    目录 1.git diff 命令说明 2.比较工作区与暂存区中文件的差别 3.比较暂存区与本地库中文件的差别 4.总结git diff命令常见用法 5.总结 1.git diff 命令说明 在comm ...

  8. 『现学现忘』Git基础 — 2、Git和SVN的区别

    1.Git和SVN的区别 (1)SVN(集中式版本管理系统) 集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者 ...

  9. 『现学现忘』Git基础 — 3、Git介绍

    目录 1.Git的历史 2.Git的特点 3.Git在项目协作开发中所解决的问题 1.Git的历史 Git是目前世界上最先进的分布式版本控制系统,开源.免费. Git 是 Linus (林纳斯)为了帮 ...

随机推荐

  1. [原创] RestartPC64-中文版v1.0.0.9

    原来发布的RestartPC-中文版和英文版v1.0.0.5,在PE64下无效.所以重新编译了64位版的RestartPC64-中文版v1.0.0.9,可以在PE64下面.正常Win64系统下面重启关 ...

  2. mui 登录跳转到首页之后顶部选项卡不灵敏问题

    前段时间开发一个用mui开发app的时候遇到了登录跳转到首页之后顶部选项卡会失灵的问题,多次尝试之后终于解决了,趁现在还有点印象记录一下吧. 一开始我是用mui.openWindow来新开首页的,出了 ...

  3. Redis 13 事务

    参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 概述 Redi ...

  4. Dubbo源码(八) - 负载均衡

    前言 本文基于Dubbo2.6.x版本,中文注释版源码已上传github:xiaoguyu/dubbo 负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡.分摊到多个 ...

  5. B/S结构通信系统原理

    本文介绍JavaWeb的B/S结构通信原理 概念:        Javaweb中B/S架构是一种系统架构形式,这里的B是Browser(浏览器),S是Server(服务器),是一种系统的架构形式,有 ...

  6. Taurus.MVC 微服务框架 入门开发教程:项目集成:4、默认安全认证与自定义安全认证。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  7. BNC Part-of-speech codes

    Extracted from the BNC Manual AJ0 adjective (general or positive) e.g. good, old AJC comparative adj ...

  8. Android开发2021.3.9日【模拟器路径】【外观字体】【简单快捷键】

    一. 1.模拟器存储路径 D:\Android\SDK\platforms(在本人的dell上) 2.使用软件 Android Studio4.2 3.注意事项 (1)修改JDK的路径为自己下载的JD ...

  9. 【前端】在浏览器控制台,直接发Ajax请求

    我们在日常的开发的过程中,经常需要前端测试发送请求测试一些数据.但是由于一些session,cookie的存在,我们无法在postman上创建一些会话.那么这样,我们就可以在浏览器上直接发送Ajax请 ...

  10. std:move() 作用 和 移动语义后 右值行为,unique_ptr的"移动"操作问题

    unique_ptr 不能进行赋值操作,但是可以有返回unique_ptr的函数,由此产生的问题: 结论1:std:move() 只是将一个实参强行转换为右值引用. 我们知道对象初始化时有 构造函数, ...