Git从入门到熟练第八讲 创建和使用分支
前言
在上一讲中我们讲到了git中时间线和提交commit的关系,还介绍了master,HEAD,branch的基本概念。这一讲内容我们学习非常重要的对分支的操作,其中包括:创建分支、分支切换、删除分支以及分支节点的切换。
目录
课前准备:
8.1 分支简介
8.1.1 master分支不是必要的分支
8.2创建和删除分支
8.2.1 创建分支
8.2.1.1 为了添加新内容创建分支
8.2.1.2 修改代码(更常见)
8.2.2 删除分支
8.3 分支安全切换
总结:
课前准备:
https://download.csdn.net/download/qq_17204647/86969196
下载这个资源然后解压,运行文件中的下图文件,(右击-git bash here-输入下面代码)
bash make_math_repo.sh
在同一目录下会生成math文件夹,里面有本章所有操作后的样子。
8.1 分支简介
几乎所有的版本控制系统都在某种形式上支持分支,但是在大多数版本控制系统中,分支的使用是较为低效的过程----常常需要完全创建一个源代码的副本。
但是Git的分支模型却极为轻量,就算是大型项目,创建分支也能在瞬间完成。在不同分支间的切换操作也是一样轻便。
Git分支的创建和合并功能因此也频繁被使用。
之前我们曾学过,当我们创建git仓库时(Repository),Git 会自动创建默认名为master的分支。而在这一章节,我们会看到分支会像树一样,从下往上生长。
8.1.1 master分支不是必要的分支
当我们创建git的时候,git默认给我们创建了一个名为master的分支,因此很多初学git的人认为这是一个特殊的,重要的分支。实际上,这个分支和我们建立的其他所有分支一样,没有什么特殊的,我们甚至可以删除它!
mkdir empty //创建empty文件夹
cd empty //进入文件目录
git init // 创建git仓库
touch foo //创建名为foo的文件
git add foo
git commit -m "committing the file foo" //提交修改
git branch //查看当前所有分支
以上操作后,结果如图
其中星号*代表当前所在分支。
git branch dev //创建名为dev的分支
git branch
结果如图
我们先切换分支后,将master分支删除
git checkout dev //切换分支
git branch -d master //删除master分支
git branch
结果如图
我们可以看到,master分支被删除。但是由于dev分支是在master分支建立并提交foo之后节点创建的,因此dev分支在这里享有和master相同的内容。
因此,请记住,master不是特殊分支,重要的分支是你在项目中,自己决定的。
8.2创建和删除分支
8.2.1 创建分支
在我们的项目中,主分支上的提交,是主要的,干净可运行的代码。
创建分支一般有两种情况,一是我们需要给项目添加新的代码,二是对之前代码进行修改。
第一种情况,如果我们添加新代码在主分支上进行,极有可能导致整个系统崩溃,而且添加新的代码功能常常需要一段时间才能完成。而这段时间,我们不可能让主分支上的代码暴露,完全处于停滞状态。
第二种情况,对于修改bug或是修改代码,常常会引出其他意想不到的bug(如复合式bug)
这个时候,我们就需要创建分支,将我们的工作区域和主分支的工作区域分隔开来。
8.2.1.1 为了添加新内容创建分支
git branch //查看分支
git branch 分支名 //创建新分支
git checkout 分支名 //切换到指定分支
在当前的节点,输入如下代码,这样我们就得到一个名为new_feature新分支
git branch new_feature
输入gitk可以看到如下图
然后转到新建的分支,新建文件并提交
git checkout new_feature //切换到new_feature分支echo "new file" > newfile.txt
git add newfile.txt
git commit -m "Adding a new file to a new branch"
echo "another new file" > file3.c
git add file3.c
git commit -m "Starting a second new file"
输入gitk,可以看到如下图
上面的查看是在GUI中查看的分支情况,实际上在命令行窗口也可以查看,输入
git log --graph --decorate --pretty=oneline --all --abbrev-commit
显示如下图
tips:上面git的命令行太长,而查看提交的分支情况又是常用的命令,因此我们可以用自定义别名来将上面命令变短,操作如下
我们选用lol 作为自定义的git命令别称,然后输入如下代码
git config --global alias.lol "log --graph --decorate --pretty=oneline --all --abbrev-commit"
测试如图:
注意:在这里我们需要明确一点,分支间是相互独立的。
我们可以在master分支上进行一次修改并提交,
echo "A small update." >> readme.txt
git commit -a -m "A small update to readme."
在gitk中,为了能够查看所有分支情况,在view-new view
选择黑线框并apply,得到如下显示
其中加粗显示的为当前分支,在分支名位置右击,可以如下显示,对分支进行操作
还有一种更明显的方式能够比较两个不同的工作环境,输入下面代码,并查看工作目录
git checkout master
git checkout new_feature
两个分支下,工作目录分布如下图
(master分支下文件) (new_feature分支下文件)
8.2.1.2 修改代码(更常见)
直接转到你需要修改代码的节点,创建分支
git branch 新分支名 SHA1 ID
还有一种更快创建分支的命令
git checkout –b 分支名 start point //创建分支同时让该分支为当前分支
其中start point可以是分支名,SHA1 ID或者是一个tag
实践输入如下命令
git branch another_fix_branch 7eb1b19 //在7eb1b19节点创建新分支
git checkout -b fixing_readme another_fix_branch //在another_fix_branch所在节点创建新分支
结果如下图
8.2.2 删除分支
当你创建分支,一般是因为你想尝试一些东西。而有时候这些尝试失败了,则需要删除分支。
git branch –d 分支名 //删除指定分支
删除分支时,记住要先切换到主分支再进行删除操作,不然会显示错误
注意删除这个操作没有自动防故障装置,很容易便可以删除。
但是如果你误删了需要的分支,可以通过以下操作进行补救。
git branch -d fixing_readme //删除fixing_readme 分支
git branch -d another_fix_branch //删除another_fix_branch 分支
git checkout -b another_fix_branch 7eb1b19 //恢复误删分支
如果你误删比较久,找不到SHA1 ID,可以输入
git reflog
然后能够显示所有对分支的操作。
8.3 分支安全切换
如果你是在分支中仅增加了新文件,则可以切换到其他分支。
但是如果对分支内容进行修改更新时,如果没有提交更新时无法切换到其他分支的。
但是如果没有完成修改不想提交这个修改,又想切换到其他分支时,可以使用git stash 暂时保存你的修改。这样你就可以切换到其他分支。
回到原先分支继续修改,则可以通过
git stash list //查看stash里内容
git stash pop //将stash内修改取出,变成和git stash命令前一样
这里的实践操作可以在课前准备生成的git仓库下进行操作
git checkout another_fix_branch //切换到another_fix_branch 分支
在math.sh文件中添加一行 c=0 ,切换到master分支
git status
git checkout master
出现如图问题,不能切换分支。
输入 git stash,重复上述命令,顺利切换分支!
而当我们回到原先分支,输入git stash pop命令就可以继续先前操作。
(pop前代码行) (pop后代码行)
总结:
本章介绍了git分支的创建和删除操作,还介绍了误删分支时,如何恢复分支。简单讲解了git stash在分支切换时,挂起修改的作用。
Git从入门到熟练第八讲 创建和使用分支相关推荐
- Python实战从入门到精通第八讲——字符串与文本2之合并拼接字符串
将几个小的字符串合并为一个大的字符串 合并的字符串是在一个序列或者 iterable 中,那么最快的方式就是使用 join() 方法.比如: >>> parts = ['Is', ' ...
- python入门教程第28讲_Python爬虫入门教程第二十八讲: 《海王》评论数据抓取 scrapy...
1. 海王评论数据爬取前分析 海王上映了,然后口碑炸了,对咱来说,多了一个可爬可分析的电影,美哉~ 摘录一个评论零点场刚看完,温导的电影一直很不错,无论是速7,电锯惊魂还是招魂都很棒.打斗和音效方面没 ...
- 【Git】Git 分支管理 ( 创建并切换分支 | 查看分支 git branch | 合并分支 git merge dev | 删除分支 git branch -d dev )
文章目录 一.创建并切换分支 1.创建分支 git branch dev 2.切换分支 git checkout dev 3.创建并切换分支 git checkout -b dev 二.查看分支 gi ...
- 数独游戏技巧从入门到精通_从入门到精通八讲 | 高效氮化镓电源设计第六讲—EMC优化和整改技巧...
氮化镓电源设计从入门到精通,这个系列直播共分为八讲,本篇第六讲将为您介绍EMC优化和整改技巧,助您完成电源工程师从入门到精通的蜕变. 前期回顾(点击下方内容查看上期直播): - 第一讲:元器件选型 - ...
- stata:stata软件教程(人大十八讲)(1) 第一章 stata入门
第一章 stata入门 1.1 安装 1.2 启用和退出 1.3 打开和查看数据 1.4 寻求帮助与网络资源 1.4.1 获取帮助的命令 1.4.2 几个主要网站 1.5 命令示例 1.5.1 进行四 ...
- python字符串操作入门十八讲——合集一
字符串操作十八讲合集 导读
- 30分钟git命令入门到放弃
30分钟git命令入门到放弃 Helkyle・ 15 小时前 172 | 暂无评论 这是一篇给像我这样的新手或者是熟悉图形工具的老鸟看的.仅作为快速入门的教程. learn-git git 现在的火爆 ...
- matlab z变换离散化_MATLAB作图从入门到熟练
有同学说,靠网络上的文章,很难学到系统的知识,还得自己看书,这话不假.主要是因为网上文章篇幅过短,难免无法概括全面,加之同学们更关心一些高效的学习方法,更倾向于接受高密集信息的学习方式,节省时间和精力 ...
- Linux PWN从入门到熟练
最近在复习pwn的一些知识.主要涉及到当堆栈开启了保护的时候,我们不能够直接将shellcode覆盖到堆栈中执行,而需要利用程序其他部分的可执行的小片段来连接成最终的shellcode.此小片段就是g ...
最新文章
- 保护您的IE浏览器安全
- git每次操作提示输入密码问题解决
- 【代码笔记】iOS-自定义弹出框
- WebLogic启动失败:java.lang.AssertionError: Could not obtain the localhost address.
- apache 统计404日志_Apache 网站日志分析
- ubuntu iptables 共享上网
- 零基础学习.NET平台和Csharp编程开发
- yarn临时目录 没有jar包_Yarn(Haoop组件之一)介绍
- jdk、jre各版本下载
- 希捷服务器硬盘15k有几代,1.5万转 希捷15K.7系列600G硬盘首测
- 区块链开源代码什么意思_区块链可以从开源中学到什么
- salt+jenkins+gitlab+ecs构建公司部署平台
- 红耳朵象全国战略,让大众享受上门洗车的福利
- 选择防身武器,利用身边的物品才是王道
- 使用Domain Adaption提升小场景时间序列预测效果的方法
- 祝我亲爱的天蝎GG生日快乐!+相识3周年小纪念【转载】
- 简单的指针二叉查找树和数组二叉查找树
- MATLAB-样条插值运算
- ECharts-Javascript的图表库推荐
- 17.2 字体的背景知识
热门文章
- 利用计算机绘制地质图的思路和方法,基于规则的地质快速辅助成图
- mac完全卸载tuxera
- Rapid IO接口测试工装研究
- html封面设计图片手绘大全,本子封面设计手绘素描图片欣赏
- MATLAB代码:储能参与调峰调频联合优化模型
- 会员管理系统与微信连接能实现哪些功能?
- DFS和BFS概念及实践+acwing 842 排列数字(dfs) +acwing 844. 走迷宫(bfs)
- MSSQL数据库的字段类型总结
- 计算机网络基础中国石油大学,2017中国石油大学继续教育计算机网络基础答案...
- Linux下c语言文本方式文件读取