『现学现忘』Git分支 — 40、分支基本操作(一)
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分支 — 40、分支基本操作(一)的更多相关文章
- 『现学现忘』Git分支 — 38、Git分支介绍
目录 1.Git分支简介 2.Git分支与SVN分支的区别 3.工作中为什么要使用分支 4.Git分支管理的好处 1.Git分支简介 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着,你可 ...
- 『现学现忘』Git分支 — 41、分支基本操作(二)
目录 6.新建一个分支并且使分支指向指定的提交对象 7.思考: 8.项目分叉历史的形成 9.分支的总结 提示:接上篇 6.新建一个分支并且使分支指向指定的提交对象 使用命令:git branch br ...
- 『现学现忘』Git基础 — 5、Git的协作模式
目录 1.分布式工作流程 2.集中式工作流 3.分支工作流 4.GitFlow 工作流(最流行) 5.Forking 工作流(偶尔使用) 6.总结 1.分布式工作流程 与传统的集中式版本控制系统(CV ...
- 『现学现忘』Git后悔药 — 27、版本回退介绍
目录 1.什么版本回退 2.需要了解两个知识点 (1)HEAD是什么 (2)HEAD指针用法 3.git reflog命令介绍 1.什么版本回退 版本回退也可以叫回滚. 若修改过的文件,不仅添加到了暂 ...
- 『现学现忘』Git分支 — 39、Git中分支与对象的关系
目录 1.Git对象之间的关系 2.提交对象与分支的关系 (1)提交对象与分支的关系 (2)分支说明 (3)HEAD与分支的关系 1.Git对象之间的关系 我们之前学了Git的三个对象:提交对象.树对 ...
- 『现学现忘』Git对象 — 16、Tree对象详解
目录 1.Tree对象介绍 2.Tree对象说明 (1)初始化一个新的本地版本库 (2)创建一个树对象(重点) (3)创建第二个文件(重点) (4)将第一个树对象加入暂存区,使其成为新的树对 3.总结 ...
- 『现学现忘』Git基础 — 21、git diff命令
目录 1.git diff 命令说明 2.比较工作区与暂存区中文件的差别 3.比较暂存区与本地库中文件的差别 4.总结git diff命令常见用法 5.总结 1.git diff 命令说明 在comm ...
- 『现学现忘』Git基础 — 2、Git和SVN的区别
1.Git和SVN的区别 (1)SVN(集中式版本管理系统) 集中式的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者 ...
- 『现学现忘』Git基础 — 3、Git介绍
目录 1.Git的历史 2.Git的特点 3.Git在项目协作开发中所解决的问题 1.Git的历史 Git是目前世界上最先进的分布式版本控制系统,开源.免费. Git 是 Linus (林纳斯)为了帮 ...
随机推荐
- JAVA语言基础组成(2)
函数 函数的定义 1.什么是函数? 函数就是定义在类中的具有特定功能的一段独立小程序.函数也称为方法. 2.函数的格式: 修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,.. ...
- PerfView专题 (第二篇):如何寻找 C# 中的 Heap堆内存泄漏
一:背景 上一篇我们聊到了如何去找 热点函数,这一篇我们来看下当你的程序出现了 非托管内存泄漏 时如何去寻找可疑的代码源头,其实思路很简单,就是在 HeapAlloc 或者 VirtualAlloc ...
- 记一次 ClickHouse 性能测试
前言 在工作场景中,我们会采集工厂设备数据用于智能控制,数据的存储用了 InfluxDB,随着数据规模越来越大,InfluxDB 的性能越来越差,故考虑引入 ClickHouse 分担 InfluxD ...
- RAID磁盘阵列技术
RAID磁盘阵列技术 1.RAID概述 RAID(Redundant Array of Independent Disk),从字面意思讲的是基于独立磁盘的具有冗余的磁盘阵列,其核心思想是将多块独立磁盘 ...
- flutter系列之:移动端的手势基础GestureDetector
目录 简介 Pointers和Listener GestureDetector 手势冲突 总结 简介 移动的和PC端有什么不同呢?同样的H5可以运行在APP端,也可以运行在PC端.两者最大的区别就是移 ...
- Python自学笔记11-函数的定义和调用
函数是组织代码的非常有效的方式,有了函数,我们就可以编写大规模的项目.可以说,函数是组织代码的最小单元. Python函数的定义 函数是代码封装的一种手段,函数中包含一段可以重复执行的代码,在需要用到 ...
- 综合布线 子网掩码 IP地址 子网划分
1.1 地址协议 ipv4 :目前主流的协议 2. ipv6 :fe80::fe7:ca03:81f:2887 2 128 IANA(The Internet Assigned Numbers Aut ...
- ClickHouse(05)ClickHouse数据类型详解
ClickHouse属于分析型数据库,ClickHouse提供了许多数据类型,它们可以划分为基础类型.复合类型和特殊类型.其中基础类型使ClickHouse具备了描述数据的基本能力,而另外两种类型则使 ...
- React Native 入门 调试项目
不管时用哪种语言,哪种框架,调试永远都是一个避不开的话题 为我们提供了远程调试的功能,而这个功能需要Chrome浏览器的配合. 1. 首先浏览器一定要安装好React Developer Tool 插 ...
- C#,启动exe程序并传参(参数间带&符号)方法
入参格式例如:C:\\Users\\Administrator\\Desktop\\测试\\测试\\bin\\Debug\\测试.exe type=1^&card_no=123 public ...