IDEA中Git常用操作及Git存储原理

Git简介与使用

Intro

Git is a free and open source distributed version control system designed to handle everything from small to very
large projects with speed and efficiency.

Git是一款分布式版本控制系统(VCS),是团队合作开发的必备工具。

Git Repository 本地可划分为3个区域:

  • workspace
  • staging area
  • local repository

其交互示意图如下:
在这里插入图片描述

git基本的命令操作可以参看:Git教程

Using within Jetbrains IDE

Jetbrains全家桶提供了对Git的支持,下面以IDEA 2024.1.4版本演示Git基本操作。

IDEA使用不同的颜色表明文件在Git中的状态,如下所示为Darcula主题下颜色的含义:

在这里插入图片描述

具体颜色含义可参看:Check file status

rollback

如果我本地改动了文件,但发现改动无效,想回到改动之前的文件状态,可以右击文件 -> Git -> Rollback:
在这里插入图片描述

commit & amend commit & commit checks

使用IDEA commit窗口可以方便地选择需要commit的文件,填写commit信息。此外如果上一次commit有东西忘写了,这次写完使用amend
commit将上次和这次改动合并成一次commit,在commit窗口勾选amend即可。

在这里插入图片描述

每次commit前需要有些前置校验呢?比如自动格式化代码、自动checkstyle,IDEA也提供了该项功能:在commit窗口,点击设置图标,勾选所需checks

1.设置2.勾选
在这里插入图片描述在这里插入图片描述
squash commit

如果我们要将多次提交合并成一个提交,可以定位到当前本地分支,并多选多条commit进行squash:

在这里插入图片描述

此时push就需要强制push了

rebase

当master代码有变动时,基于老master版本开发的本地feature分支需要rebase到最新代码(即把master分支新代码合并到本地feature开发commit之前),使用IDEA操作:

  1. 拉取master最新代码 git pull
  2. 切换到feature分支
  3. 执行rebase
1. 拉取master最新代码2.执行rebase
在这里插入图片描述在这里插入图片描述
cherry-pick

合作开发时,比如A同学在feature-a分支开发功能,B同学在feature-b分支开发,且feature-b分支依赖feature-a分支的功能,即feature-b分支基于feature-a分支的commit开发。
如果feature-a分支的commit有改动,则feature-b就要同步这些改动,且需要保证feature-b分支的commit不会凌乱,这时可使用cherry-pick来完成。

  1. 拉取feature-a最新代码;
  2. 复制分支feature-bfeature-b-bak
  3. feature-b执行reset --hardfeature-a的最早commit之前的一次commit;
  4. feature-bcherry-pick 新的feature-a的commit
  5. feature-bcherry-pick 复制的feature-b-bak的自己的commit
reset --hardcherry-pick
在这里插入图片描述在这里插入图片描述
ref
  • Boost Your Productivity: 13 Pro Git Tips for JetBrains IDEs

Git存储原理

git中有三种类型的文件:

  • blob: 压缩存储的二进制文件内容
  • tree: 表示项目文件夹,tree下包含subtree和blob,以及blob对应文件的文件名、访问权限等信息,使用Merkel Hash Tree数据结构构建
  • commit: 包含指向的tree和提交信息

3种类型文件均存储于./.git/objects/文件夹下,利用40位的SHA的hash值的前2位作为文件夹,后38位作为文件名,其组织形式如下图:
在这里插入图片描述

假设git项目文件夹下有一个a.txt文件,执行完git add .git commit -m "first commit"./.git/objects/文件夹新增3个objects:

.git
> watch -n .5 tree .git
...
├── objects
│    ├── 08
│    │    └── 585692ce06452da6f82ae66b90d98b55536fca
│    ├── 47
│    │    └── d94322168b96993a93f2346c8eafd50bcc8317
│    ├── 78
│    │    └── 981922613b2afb6025042ff6bd878ac1994e85
|...

而分支是指向commit hash的一个引用,其存储在 .git/refs/heads/下:

> pwd
/Users/bty/IdeaProjects/testgit/.git/refs/heads
> ls
feature-a	main
> cat main 
47d94322168b96993a93f2346c8eafd50bcc8317

HEAD表示当前的分支,指向 .git/refs/heads/的一个文件:

> pwd
/Users/baotingyu/IdeaProjects/testgit/.git
> ls
COMMIT_EDITMSG	config		hooks		info		objects
HEAD		description	index		logs		refs
> cat HEAD 
ref: refs/heads/feature-a

objects文件类型可通过git cat-file -t [40位hash]查看:


> git cat-file -t 78981922613b2afb6025042ff6bd878ac1994e85
blob> git cat-file -t 08585692ce06452da6f82ae66b90d98b55536fca
tree> git cat-file -t 47d94322168b96993a93f2346c8eafd50bcc8317
commit

以上文件的内容均可以通过git cat-file -p [40位hash]


# 查看一个blob,显示文件内容(不包含文件名,访问权限等信息,都在tree里面)
> git cat-file -p 78981922613b2afb6025042ff6bd878ac1994e85
a# 查看一个tree,显示tree下的内容(子tree或blob)
> git cat-file -p 08585692ce06452da6f82ae66b90d98b55536fca
100644 blob 78981922613b2afb6025042ff6bd878ac1994e85	a.txt# 查看一个commit,包含指向的tree和提交信息
> git cat-file -p 47d94322168b96993a93f2346c8eafd50bcc8317
tree 08585692ce06452da6f82ae66b90d98b55536fca
author bty <bty@com> 1720876267 +0800
committer bty <bty@com> 1720876267 +0800first commit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/379069.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2010-2022年别克英朗维修手册电路图线路图接线图资料更新

经过整理&#xff0c;2010-2022年别克英朗汽车全系列已经更新至汽修帮手资料库内&#xff0c;覆盖市面上99%车型&#xff0c;包括维修手册、电路图、新车特征、车身钣金维修数据、全车拆装、扭力、发动机大修、发动机正时、保养、电路图、针脚定义、模块传感器、保险丝盒图解对…

How to integrate GPT-4 model hosted on Azure with the gptstudio package

题意&#xff1a;怎样将托管在Azure上的GPT-4模型与gptstudio包集成&#xff1f; 问题背景&#xff1a; I am looking to integrate the OpenAI GPT-4 model into my application. Here are the details I have: Endpoint: https://xxxxxxxxxxxxxxx.openai.azure.com/Locatio…

uniapp 开发 App 对接官方更新功能

插件地址&#xff1a;升级中心 uni-upgrade-center - App - DCloud 插件市场 首先创建一个 uni-admin 项目&#xff0c;选择你要部署的云开发服务商&#xff1a; 然后会自动下载模板&#xff0c;部署云数据库、云函数 第二步&#xff1a;将新创建的 uni-admin 项目托管到…

[算法] 优先算法(六):二分查找算法(下)

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

传输层和网络层的关系,ip协议+ip地址+ip报头字段介绍(4位TOP字段,8位生存时间(ttl)),ip地址和端口号的作用

目录 传输层和网络层的关系 引入 介绍 ip协议 介绍 ip地址 引入 数据传递过程 举例(ip地址的作用) ip报头 格式 4位版本号 ip地址不足的问题 8位服务类型 4位TOP(type of service)字段 最小延时 最大吞吐量 4位首部长度 16位总长度 8位协议号 首部校验和…

vivado FFT IP Core

文章目录 前言FFT IP 接口介绍接口简介tdata 格式说明 其他细节关于计算精度及缩放系数计算溢出架构选择数据顺序实时/非实时模式数据输入输出时序关于配置信息的应用时间节点 FFT IP 例化介绍控制代码实现 & 测试参考文献 前言 由于计算资源受限&#xff0c;准备将上位机 …

【Linux应用编程】系统信息与资源 | 如获取、设置系统时间、日期、/proc 虚拟文件系统等

系统信息与系统资源 通过 Linux 系统调用或 C 库函数获取系统信息&#xff08;如获取系统时间、日期以及设置系统时间、日期等&#xff09;&#xff1b; Linux 系统下的/proc 虚拟文件系统&#xff08;读取系统、进程有关信息&#xff09;&#xff1b; 系统信息 主要介绍了用…

成都亚恒丰创教育科技有限公司 【插画猴子:笔尖下的灵动世界】

在浩瀚的艺术海洋中&#xff0c;每一种创作形式都是人类情感与想象力的独特表达。而插画&#xff0c;作为这一广阔领域中的璀璨明珠&#xff0c;以其独特的视觉语言和丰富的叙事能力&#xff0c;构建了一个又一个令人遐想连篇的梦幻空间。成都亚恒丰创教育科技有限公司 在众多插…

数据采集监控平台:挖掘数据价值 高效高速生产!

在当今数字化的时代&#xff0c;数据已成为企业非常宝贵的资产之一。然而&#xff0c;要充分发挥数据的潜力&#xff0c;离不开一个强大的数据采集监控平台&#xff0c;尤其是生产制造行业。它不仅是数据的收集者&#xff0c;更是洞察生产的智慧之眼&#xff0c;高效高速处理产…

昇思MindSpore学习开始

昇思MindSpore是一个全场景深度学习框架&#xff0c;旨在实现易开发、高效执行、全场景统一部署三大目标。 其中&#xff0c;易开发表现为API友好、调试难度低&#xff1b;高效执行包括计算效率、数据预处理效率和分布式训练效率&#xff1b;全场景则指框架同时支持云、边缘以…

stm32:CAN通讯

目录 介绍 协议层 CAN的 帧/报文 种类 数据帧 远程帧&#xff08;遥控帧&#xff09; 错误帧 过载帧 帧间隔 总线仲裁 stm32的CAN外设 工作模式 测试模式 功能框图 时序 标准时序 例子 环回静默模式测试 寄存器代码 HAL版本 介绍 一种功能丰富的车用总线标…

基于JAVA+SpringBoot+Vue+uniapp+协同过滤算法+爬虫+AI的减肥小程序

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 小程序用户登录&#…

Guava LocalCache源码分析:LocalCache的get、put、expand、refresh、remove、clear、cleanUp(一)

Guava LocalCache源码分析&#xff1a;LocalCache的get、put、expand 前言一、get二、put三、expand相关链接 前言 上篇文章&#xff0c;详细描写了Guava LocalCache怎样如ConcurrentHashMap对缓存数据进行了分段存储。本章主要针对LocalCache重要的几个接口进行说明。 一、g…

GuLi商城-商品服务-API-属性分组-分组修改级联选择器回显

前端代码:略 后端回显接口: 递归方法: @Override publi

docker部署canal 并监听mysql

1.部署mysql 需要开启mysql的binlong&#xff0c;和创建好用户等 可以参考这个 Docker部署Mysql数据库详解-CSDN博客 2.部署canal 参考这一篇&#xff1a; docker安装Canal&#xff0c;开启MySQL binlog &#xff0c;连接Java&#xff0c;监控MySQL变化_docker canal-CSD…

深入理解JS中的事件委托

JavaScript中的事件委托是一种非常有用的事件处理模式,它允许我们利用事件模型的事件冒泡阶段来减少事件处理器的数量,提高网页性能。本文将介绍事件委托的概念、工作原理、优点以及如何在实际项目中应用事件委托。 1、事件模型 事件模型指在Web开发中,处理和管理事件(如…

分布式对象存储minio

本教程minio 版本&#xff1a;RELEASE.2021-07-*及以上 1. 分布式文件系统应用场景 互联网海量非结构化数据的存储需求 电商网站&#xff1a;海量商品图片视频网站&#xff1a;海量视频文件网盘 : 海量文件社交网站&#xff1a;海量图片 1.1 Minio介绍 MinIO 是一个基于Ap…

通用图形处理器设计GPGPU基础与架构(二)

一、前言 本系列旨在介绍通用图形处理器设计GPGPU的基础与架构&#xff0c;因此在介绍GPGPU具体架构之前&#xff0c;需要了解GPGPU的编程模型&#xff0c;了解软件层面是怎么做到并行的&#xff0c;硬件层面又要怎么配合软件&#xff0c;乃至定出合适的架构来实现软硬件协同。…

最新版智能修图-中文luminar ai 1.55(13797) 和 neo1.20,支持m芯片和intel芯片(绝对可用)

一。Luminar AI for macOS 完整版本 这个程序是第一个完全由人工智能驱动的图像编辑器。有了它&#xff0c;创建引人注目的照片是有趣的&#xff0c;令人惊讶的容易。它是一个独立的照片编辑器和macOS插件。 1.1 Luminar AI for macOS 轻轻地塑造和完善一个肖像打造富有表现…

如何使用 GraalVM 减少与 Kafka 集成测试中的内存消耗

在本文中&#xff0c;我想分享我使用 GraalVM 为 EmbeddedKafka 创建本机映像的经验。在集成测试中使用此映像不仅可以加快测试场景的执行速度&#xff0c;还可以减少内存消耗。有趣的是&#xff0c;与在 Testcontainers 中使用 confluentinc/cp-kafka 相比&#xff0c;在速度和…