当前位置: 首页 > ops >正文

Git分支

几乎所有的版本控制系统以某种形式支持分支
使用分支意味着你可以把你的工作从主线分列开来

在很多版本控制系统中,因为需要创建一个源代码目录的副本
所以既会浪费空间、又会耗费很多时间。

有人把Git分支的模型,称之为大杀器。也正是因为这一特性,让Git从众多版本控制中脱颖而出。

Git为何如此的出众呢?是因为Git处理分支的方式可谓是难以置信的清亮。Git创建分支,几乎可以在一瞬间完成。并且分支之间的切换及其的便捷。

因此,Git 鼓励在工作流中频繁的使用分支与合并。


官网上是这么说的:

理解和精通这一特性(鼓励频繁使用分支与合并),你便会意识到 Git 是如此的强大而又独特,并且从此真正改变你的开发方式。


那为何Git有这样的特性呢?

分支简介:

Git 保存的不是文件之间的差异,而是一些快照。

当你进行commit提交时,你会创建一个提交对象,而这个提交对象里面存储的是提交者的姓名、邮箱、提交时携带的信息、以及指向父节点的指针。

我知道,这听起来有点抽象。举个例子:

假如你把如下:

README test.rb LICENSE

这三个文件存入暂存区,并提交。

$ git add README test.rb LICENSE
$ git commit -m 'The initial commit of my project'

当你存入暂存区时,会发生这些:
首先,Git会把内容,以快照的形式存入git仓库中的blob,并且会用(SHA-1哈希算法)计算出校验和(唯一标识),并将这个校验和放入暂存区。注意⚠️,放在暂存区的是这个唯一标识,不是修改的具体内容。

紧接着,文件会计算出子目录的校验和,放在树对象中,而这个对象,里面存储的是,子目录下各个文件的blob的唯一标识。

注意,tree对象中,存储的是目录结构和blob对象索引。
只是各个文件之间的关系,而不储存具体内容。

存储具体内容(快照)的工作,是git仓库做的事。

最后提交对象(commit)会指向tree对象。

三者的关系是:commit -> tree -> blob/子树

而每次提交都会产生commit对象,并且指针指向父节点(上一次提交的commit对象)。
注意,若你是第一次提交,则你不会拥有父节点,因为你本身就是跟节点

当然还有特殊情况,如果此时你刚刚进行了不同分支之间的合并,那么,你将会有多个父节点。

分支创建:

要谨记,master不是一个特殊的分支,他与其他分支一样,只不过git init 的时候,默认建立了这个分支。算是约定俗成吧。

创建一个新的testing分支

$ git branch testing

其中HEAD是指,此时你正在处于哪个分支。

想信此刻,你对一下代码,已经不在感到陌生与害怕了吧😉😁

$ git log --oneline --decorate --graph --all
* c2b9e (HEAD, master) made other changes
| * 87ab2 (testing) made a change
|/
* f30ab add feature #32 - ability to add new formats to the
* 34ac2 fixed bug #1328 - stack overflow under certain conditions
* 98ca9 initial commit of my project

由于 Git 的分支实质上仅是包含所指对象校验和(长度为 40 的 SHA-1 值字符串)的文件,所以它的创建和销毁都异常高效。

创建一个新分支就相当于往一个文件中写入 41 个字节(40 个字符和 1 个换行符),如此的简单能不快吗?

这也是为什么鼓励创建分支....


https://git-scm.com/book/zh/v2 (Git官网)


接下来就是个人技术专栏,里面记录了几个简单且常用的命令:

在往gitee上推送时:

大家推送远程仓库的时候,一般默认的都是origin。

这里是方便区分。如下github、gitee,其实你也可以自定义其他名字。

# GitHub 仓库
git remote add github git@github.com:user/repo.git# Gitee 仓库
git remote add gitee git@gitee.com:user/repo.git
# 同时推送到两个平台
git push github main && git push gitee main

http://www.xdnf.cn/news/16564.html

相关文章:

  • c++ nlohmann/json读写json文件
  • 溶解能计算
  • 【24】C# 窗体应用WinForm ——日历MonthCalendar属性、方法、实例应用
  • 电磁兼容(EMC):整改案例(十三)屏蔽外壳开孔解决433MHz无线通信问题
  • hive专题面试总结
  • c++-list
  • Elasticsearch索引设计与性能优化实战指南
  • 查询mac 安装所有python 版本
  • vscode开发微信小程序
  • 2411.按位或最大的最小子数组长度
  • 信息技术发展与区块链的崛起:深度解析与未来展望
  • 基于web的在线购物系统的设计与实现/在线商城的设计与实现
  • 【微信小程序】12、生物认证能力
  • 从字符串中“薅出”最长子串:LeetCode 340 Swift 解法全解析
  • 《使用Qt Quick从零构建AI螺丝瑕疵检测系统》——7. AI赋能(上):训练你自己的YOLOv8瑕疵检测模型
  • RTSP协议详解与C++实现实例
  • 津发科技带你了解皮肤电信号中的SCL与SCR
  • 深度解读|美创科技参编国家标准《数字水印技术实现指南》
  • windows 获取 APK 文件的包名和启动 Activity 名称
  • Kafka——Kafka控制器
  • 深入浅出设计模式——创建型模式之建造者模式 Builder
  • pnpm 入门与实践指南
  • ZKmall开源商城架构工具链:Docker、k8s 部署与管理技巧
  • [leetcode] 实现 Trie (前缀树)
  • 暑期算法训练.10
  • 【智能协同云图库】智能协同云图库第八弹:基于阿里云百炼大模型—实现 AI 扩图功能
  • 1 RAG三问
  • 云端文档管理新纪元:Paperless-ngx与cpolar打造的无边界文件生态
  • GO 开发环境安装及配置
  • 【21】C# 窗体应用WinForm ——图片框PictureBox属性、方法、实例应用