Learn Git Branching 学习笔记(基础篇)
目录
一、基础篇:
1.git commit
2.git branch
3.git merge
4.git rebase
前言
链接:Learn Git Branching
网上已经有前辈总结出来了答案,主要是还是想记录一下自己的学习思路。
链接:Learn Git Branching 答案汇总_Fighting_初心的博客-CSDN博客_learngitbranching
一、基础篇:
循序渐进地介绍Git主要命令:git commit; git branch; git merge; git rebase
1.git commit
Git仓库中的提交记录保存的是你的目录下所有文件的快照,就像是把整个目录复制,然后再粘贴一样,但比复制粘贴优雅许多!提交记录可以看作是项目的快照,它非常轻量,可以快速地在这些提交记录之间切换!
Git还保存了提交的历史记录,这也是为什么大多数提交记录的上面都有父节点的原因——我们会在图示中用箭头来表示这种关系,对于项目组的成员来说,维护提交历史对大家都有好处。
Git希望提交记录尽可能地轻量,因此在每次进行提交时,它并不会盲目地复制整个目录。条件允许的情况下,它会将当前版本与仓库中的上一个版本进行对比,并把所有的差异打包到一起作为一个提交记录。
我们来实际操作一下,看看提交记录是怎样的。右边展示了一个(小型)Git代码库。当前有两个提交记录——初始提交C0和气候可能包含某些有用修改的提交C1。
输入git commit,修改了代码库,并把这些修改保存成了一个提交记录C2。C2的父节点是C1,父节点是当前提交中变更的基础。
题目:提交两次修改
答案:
git commit //生成C2节点
git commit //生成C3节点
2.git branch
Git的分支也非常轻量。它们只是简单地指向某个提交记录——仅此而已。所以许多Git爱好者传颂:早建分支!多用分支!
这是因为即使创建再多的分支也不会造成储存或内存上的开销,并且按逻辑分解工作到不同的分支要比维护那些特别臃肿的分支简单多了。
在将分支和提交记录结合起来后,我们会看到两者如何协作。现在只要记住使用分支其实就相当于在说:“我想基于这个提交以及它所有的父提交进行新的工作。”
通过实际操作来看看分支是什么样子的。接下来将要创建一个到名为newImage的分支。
输入git branch newImage,新创建的分支newImade指向的是提交记录。
试着往新分支里提交一些东西,输入git commit。
main分支前进了,但newImage分支还呆在原地。因为没有在newImage这个新分支上,main分支上有星号(*),表示当前所在的分支是main。
用git checkout <name>来告诉Git我们想要切换到新的分支上。
输入git checkout newImage ; git commit 可在修改提交之前先切换到新分支上,修改已经保存到新的分支里了。
注意:在Git 2.23版本中,引入了一个名为git switch 的新命令,最终会取代git checkout,因为checkout作为单个命令有点超载(它承载了很多独立的功能)。由于现在很多人还无法使用switch,网页里面仍然使用checkout而不是switch。
题目:创建一个名为bugFix的新分支,然后切换过去。(有更简洁的方式:想创建一个新的分支同时切换到新创建的分支的话,可以通过git checkout -b<your branch name>来实现)
答案:
git branch bugFix //生成分支bugFix
git checkout bugFix //切换到bugFix分支上
3.git merge
将两个分支合并到一起,新建一个分支,在上面开发新功能,开发完成后再合并回主线。
第一种方法:git merge。在git中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。翻译成自然语言相当于:“我要把这两个父节点本身及它们所有的祖先都包含进来。”
准备了两个分支,每个分支上各有一个独有的提交。这意味着没有一个分支包含了我们修改的所有内容。咱们通过合并这两个分支来解决问题。
输入git merge bugFix把bugFix合并到main里。
main现在指向了一个拥有两个父节点的提交记录。假如从main开始沿着箭头向上看,在到达起点的路上会经过所有的提交记录。这意味着main包含了对代码库的所有修改。
输入git checkout bugFix ; git merge main 把main分支合并到bugFix中。
因为main继承自bugFix,Git什么都不用做,只是简单地把bugFix移动到main所指向的那个提交记录。
题目:创建一个名为bugFix的新分支,然后切换过去。(有更简洁的方式:想创建一个新的分支同时切换到新创建的分支的话,可以通过git checkout -b<your branch name>来实现)
要想通过这一关,需要以下几步:
- 创建新分支bugFix
- 用 git checkout bugFix命令切换到该分支
- 提交一次
- 用git checkout main切换回main
- 再提交一次
- 用git merge 把bugFix合并到main
答案:
git checkout -b bugFix //创建并切换分支bugFix
git commit //在bugFix分支增加C2节点
git checkout main //切换到main上
git commit //在main分支增加C3节点
git merge bugFix //将bugFix分支的内容合并到main上
4.git rebase
第二种合并方法:git rebase。rebase实际上就是取出一系列的提交记录,“复制”题目,然后再另外一个地方逐个的放下去。
rebase的优势就是可以创造更线性的提交历史,如果只允许使用rebase的话,代码库的提交历史将会变得异常清晰。
有两个分支,当前所在分支是bugFix,想把bugFix分支里的工作直接移到main分支上。移动以后会使得两个分支的功能看起来像是按顺序开发,但实际上它们是并行开发的。
输入git rebase main,现在bugFix分支上的工作在main的最顶端,同时也得到了一个更线性的提交序列。
注意,提交记录C3依然存在(树上那个半透明的节点),而C3'是我们rebase到main分支上的C3的副本。
输入git checkout main切换到main上,输入git rebase bugFix把它rebase 到bugFix分支上。
由于bugFix继承自main,所以Git只是简单地把main分支的引用向前移动了一下。
题目:
要想通过这一关,需要以下几步:
- 新建并切换到bugFix分支
- 提交一次
- 切换回main再提交一次
- 再次切换到bugFix分支上,rebase到main上
答案:
git checkout -b bugFix //创建并切换分支bugFix
git commit //在bugFix上增加C2节点
git checkout main //切换到main上
git commit //在main上增加C3节点
git checkout bugFix //切换到bugFix分支上
git rebase main //将bugFix分支上的内容合并到main上
基础篇完结撒花~
Learn Git Branching 学习笔记(基础篇)相关推荐
- Learn Git Branching 学习笔记(移动提交记录篇)
目录 一.移动提交记录篇 1.Git Cherry-pick 2.交互式rebase Git用法高级篇在上一篇文章中Learn Git Branching 学习笔记(高级篇)_流年--by gone的 ...
- Learn Git Branching 学习笔记(高级话题篇)
目录 一.高级话题篇 1.多分支rebase 2.选择父提交记录 3.纠缠不清的分支 Git的一些技术.技巧与贴士集合在上一篇文章中 Learn Git Branching 学习笔记(Git 技术.技 ...
- learn git branching学习整理3
介绍 learn git branching是一个非常好的git学习网站,它与传统的文字讲解相比较起来有一个非常大的亮点----图形化的git提交树可以实时的反馈并告诉你当前所做的git操作在对于代码 ...
- MySQL学习笔记-基础篇1
MySQL 学习笔记–基础篇1 目录 MySQL 学习笔记--基础篇1 1. 数据库概述与MySQL安装 1.1 数据库概述 1.1.1 为什么要使用数据库 1.2 数据库与数据库管理系统 1.2.1 ...
- Redis学习笔记①基础篇_Redis快速入门
若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 资料链接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA( ...
- MySQL学习笔记-基础篇2
MySQL学习笔记-基础篇2 目录 MySQL学习笔记-基础篇2 8.子查询 8.1 需求分析与问题解决 8.1.1 实际问题 8.1.2 子查询的基本使用 8.1.3 子查询的分类 8.2 单行子查 ...
- git 指令学习和熟悉——learn git branching练习笔记
前言: 在工作中我们用到git系列工具机会很多,也常常需要熟悉git 相关指令,那怎样才能高效学习git指令呢?我们可以通过小游戏learn git branching和菜鸟教程完成学习. 小游戏链接 ...
- extlink.php,ExtJs 学习笔记基础篇 Ext组件的使用_extjs
昨天刚接触到Extjs,简单写了篇学习笔记,今天继续. 天介绍一下Ext中组件举几个简单的例子做说明.注意:文章内容有些摘自本人学习过程中看到的资料. Ext2.0对框架进行了非常大的重构,其中最重要 ...
- python3多线程编程_Python 3多线程编程学习笔记-基础篇
本文是学习<Python核心编程>的学习笔记,介绍了Python中的全局解释器锁和常用的两个线程模块:thread, threading,并对比他们的优缺点和给出简单的列子. 全局解释器锁 ...
- C++ 学习笔记----基础篇
(一)类和抽象数据类型 1.通过类实现的接口(公有和私有)可实现信息隐藏.实现对数据的封装等: 2.抽象数据类型(ADT:Abstract Data Type):当一个数据类型仅暴露公有接口,而将 ...
最新文章
- 通过JS控制各种元素的点击事件的【时间间隔】,特别适合【发表评论】功能...
- 20170819 - 今日技能封装 - A
- Tensorflow并行计算:多核(multicore),多线程(multi-thread),计算图分割(Graph Partition)
- 第三章 正态性检验、自相关检验与异方差性检验
- ASP.NET 3.5中的ListView控件和DataPager控件(一)
- java for循环返回值_JAVA——for循环
- 阿里云k8s私有仓库registry操作管理
- melogin.cn主页登录_melogincn首页 melogin·cn登录页面入口
- java web 房屋租赁系统
- just help me
- 0.96寸OLED屏幕控制器SSD1306详解
- 矩阵与拼接屏如何连接之方案详解
- java中点击按钮读取和写入文件实现登录和注册
- 2021 年使用人数最多的5款主流前端框架点评
- 【图解数据结构】队列全面总结
- 纯策略纳什均衡与混合策略纳什均衡的比较
- GRDDC2020数据集下载及介绍
- neovim符号自动补全auto-pairs
- 云鹊医认证审核需要多久_云鹊医电脑版下载-云鹊医电脑版下载v3.0.6-西西软件下载...
- 论文: 基于智能优化算法的测试数据生成综述
热门文章
- python3 import的一个细节
- 3个阶段 项目征名_《传奇3G》新版本 征名活动邀您参与
- java 北京时区_世界时区和Java时区详解
- C++ access( )函数
- nginx日志中$request_body 十六进制字符(\x22\x9B\x5C\x09\x08...)完美解决方案
- 服务器的cd驱动器怎么修改盘符,更改dvd驱动器盘符,cd驱动器盘符改
- Mysql中使用mybatis中sql语句写法操作
- 极虎病毒结束度假,感染量再攀高峰
- stream从list实体类筛选出符合条件的单个实体类
- linux centos7 apache+mariadb+php 虚拟机vmware workstation lamp环境搭建