前言

在上一讲中我们讲到了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从入门到熟练第八讲 创建和使用分支相关推荐

  1. Python实战从入门到精通第八讲——字符串与文本2之合并拼接字符串

    将几个小的字符串合并为一个大的字符串 合并的字符串是在一个序列或者 iterable 中,那么最快的方式就是使用 join() 方法.比如: >>> parts = ['Is', ' ...

  2. python入门教程第28讲_Python爬虫入门教程第二十八讲: 《海王》评论数据抓取 scrapy...

    1. 海王评论数据爬取前分析 海王上映了,然后口碑炸了,对咱来说,多了一个可爬可分析的电影,美哉~ 摘录一个评论零点场刚看完,温导的电影一直很不错,无论是速7,电锯惊魂还是招魂都很棒.打斗和音效方面没 ...

  3. 【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 ...

  4. 数独游戏技巧从入门到精通_从入门到精通八讲 | 高效氮化镓电源设计第六讲—EMC优化和整改技巧...

    氮化镓电源设计从入门到精通,这个系列直播共分为八讲,本篇第六讲将为您介绍EMC优化和整改技巧,助您完成电源工程师从入门到精通的蜕变. 前期回顾(点击下方内容查看上期直播): - 第一讲:元器件选型 - ...

  5. stata:stata软件教程(人大十八讲)(1) 第一章 stata入门

    第一章 stata入门 1.1 安装 1.2 启用和退出 1.3 打开和查看数据 1.4 寻求帮助与网络资源 1.4.1 获取帮助的命令 1.4.2 几个主要网站 1.5 命令示例 1.5.1 进行四 ...

  6. python字符串操作入门十八讲——合集一

    字符串操作十八讲合集 导读

  7. 30分钟git命令入门到放弃

    30分钟git命令入门到放弃 Helkyle・ 15 小时前 172 | 暂无评论 这是一篇给像我这样的新手或者是熟悉图形工具的老鸟看的.仅作为快速入门的教程. learn-git git 现在的火爆 ...

  8. matlab z变换离散化_MATLAB作图从入门到熟练

    有同学说,靠网络上的文章,很难学到系统的知识,还得自己看书,这话不假.主要是因为网上文章篇幅过短,难免无法概括全面,加之同学们更关心一些高效的学习方法,更倾向于接受高密集信息的学习方式,节省时间和精力 ...

  9. Linux PWN从入门到熟练

    最近在复习pwn的一些知识.主要涉及到当堆栈开启了保护的时候,我们不能够直接将shellcode覆盖到堆栈中执行,而需要利用程序其他部分的可执行的小片段来连接成最终的shellcode.此小片段就是g ...

最新文章

  1. 保护您的IE浏览器安全
  2. git每次操作提示输入密码问题解决
  3. 【代码笔记】iOS-自定义弹出框
  4. WebLogic启动失败:java.lang.AssertionError: Could not obtain the localhost address.
  5. apache 统计404日志_Apache 网站日志分析
  6. ubuntu iptables 共享上网
  7. 零基础学习.NET平台和Csharp编程开发
  8. yarn临时目录 没有jar包_Yarn(Haoop组件之一)介绍
  9. jdk、jre各版本下载
  10. 希捷服务器硬盘15k有几代,1.5万转 希捷15K.7系列600G硬盘首测
  11. 区块链开源代码什么意思_区块链可以从开源中学到什么
  12. salt+jenkins+gitlab+ecs构建公司部署平台
  13. 红耳朵象全国战略,让大众享受上门洗车的福利
  14. 选择防身武器,利用身边的物品才是王道
  15. 使用Domain Adaption提升小场景时间序列预测效果的方法
  16. 祝我亲爱的天蝎GG生日快乐!+相识3周年小纪念【转载】
  17. 简单的指针二叉查找树和数组二叉查找树
  18. MATLAB-样条插值运算
  19. ECharts-Javascript的图表库推荐
  20. 17.2 字体的背景知识

热门文章

  1. 利用计算机绘制地质图的思路和方法,基于规则的地质快速辅助成图
  2. mac完全卸载tuxera
  3. Rapid IO接口测试工装研究
  4. html封面设计图片手绘大全,本子封面设计手绘素描图片欣赏
  5. MATLAB代码:储能参与调峰调频联合优化模型
  6. 会员管理系统与微信连接能实现哪些功能?
  7. DFS和BFS概念及实践+acwing 842 排列数字(dfs) +acwing 844. 走迷宫(bfs)
  8. MSSQL数据库的字段类型总结
  9. 计算机网络基础中国石油大学,2017中国石油大学继续教育计算机网络基础答案...
  10. Linux下c语言文本方式文件读取