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

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是一款分布式版本控制系统(VSC),是团队合作开发的必备工具。

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

相关文章:

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是一款分布式版本控制系统&#xff08;VSC&#xff09;&#xff0c;是团队合作开发…...

人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解。回归分析是统计学和机器学习中的一种重要方法&#xff0c;用于研究因变量和自变量之间的关系。在机器学习中&#xff0c;回归算法被广泛应用于…...

智能制造热点词汇科普篇——工业微服务

随着互联网技术的不断发展&#xff0c;近十年来&#xff0c;微服务也逐渐走进人们的视线中来。何为微服务&#xff1f;让我们先来看看百度百科上的定义&#xff1a;微服务&#xff08;或称微服务架构&#xff09;是一种云原生架构方法&#xff0c;在单个应用中包含众多松散耦合…...

FastGPT+OneAI接入网络模型

文章目录 FastGPT连接OneAI接入网络模型1.准备工作2.开始部署2.1下载 docker-compose.yml2.2修改docker-compose.yml里的参数 3.打开FastGPT添加模型3.1打开OneAPI3.2接入网络模型3.3重启服务 FastGPT连接OneAI接入网络模型 1.准备工作 本文档参考FastGPT的官方文档 主机ip接…...

Java核心篇之JVM探秘:内存模型与管理初探

系列文章目录 第一章 Java核心篇之JVM探秘&#xff1a;内存模型与管理初探 第二章 Java核心篇之JVM探秘&#xff1a;对象创建与内存分配机制 第三章 Java核心篇之JVM探秘&#xff1a;垃圾回收算法与垃圾收集器 第四章 Java核心篇之JVM调优实战&#xff1a;Arthas工具使用及…...

未来互联网的新篇章:深度解析Facebook的技术与战略

随着科技的飞速发展和社会的不断变迁&#xff0c;互联网作为全球信息交流的重要平台&#xff0c;正经历着前所未有的变革和演进。作为全球最大的社交媒体平台之一&#xff0c;Facebook不仅是人们沟通、分享和互动的重要场所&#xff0c;更是科技创新和数字化进程的推动者。本文…...

MySQL卸载 - Windows版

MySQL卸载 - Windows版 1. 停止MySQL服务 winR 打开运行&#xff0c;输入 services.msc 点击 “确定” 调出系统服务。 2. 卸载MySQL相关组件 打开控制面板 —> 卸载程序 —> 卸载MySQL相关所有组件 3. 删除MySQL安装目录 4. 删除MySQL数据目录 数据存放目录是在 …...

Java核心篇之JVM探秘:对象创建与内存分配机制

系列文章目录 第一章 Java核心篇之JVM探秘&#xff1a;内存模型与管理初探 第二章 Java核心篇之JVM探秘&#xff1a;对象创建与内存分配机制 第三章 Java核心篇之JVM探秘&#xff1a;垃圾回收算法与垃圾收集器 第四章 Java核心篇之JVM调优实战&#xff1a;Arthas工具使用及…...

Nuxt框架中内置组件详解及使用指南(五)

title: Nuxt框架中内置组件详解及使用指南&#xff08;五&#xff09; date: 2024/7/10 updated: 2024/7/10 author: cmdragon excerpt: 摘要&#xff1a;本文详细介绍了Nuxt框架中和组件的使用方法与配置&#xff0c;包括安装、基本用法、属性详解、示例代码以及高级功能如…...

python开发遇到的坑汇总

文章目录 1.点击导入操作&#xff0c;所有配置全没了 1.点击导入操作&#xff0c;所有配置全没了 在 PyCharm 中&#xff0c;如果你遇到了点击导入&#xff08;import&#xff09;操作后&#xff0c;项目似乎进行了重新安装或重新部署的情况&#xff0c;这通常不是由简单的导入…...

【线性表,线性表中的顺序表和链表】

目录 1、线性表的定义和基本操作1.1、线性表的定义1.2、线性表的基本操作 2、顺序表和链表的比较2.1、顺序表2.1.1、顺序表的定义和特点2.1.2、顺序表的实现&#xff08;1&#xff09;顺序表的静态分配&#xff1a;&#xff08;2&#xff09;顺序表的动态分配 2.1.3、顺序表的基…...

46 mysql 客户端拿不到具体的错误信息

前言 这是最近碰到的一个问题 同样的一个 环境的问题, 在正常的 mysql 环境会返回 具体的错误信息, 然后 在我的另外一个环境里面 只能返回一些 unknown error 之类的 十分抽象的环境 然后 我们这里 来看一下 具体的情况 我们这里从 错误的环境 往前推导 来查看 并解决这个…...

Java语言程序设计——篇三(2)

循环结构 概述1️⃣while循环例题讲解 2️⃣do-while循环例题讲解 &#x1f6a9;while循环与do-while循环区别3️⃣for循环例题讲解 4️⃣循环的嵌套&#x1f3ee;例题讲解 概述 ⭐️Java语言提供了4种循环结构&#xff1a; (1) while循环 (2) do-while循环 (3) for循环 (4)增…...

如何实现一个分布式锁

如何实现一个分布式锁 本篇内容主要介绍如何使用 Java 语言实现一个注解式的分布式锁&#xff0c;主要是通过注解AOP 环绕通知来实现。 1. 锁注解 我们首先写一个锁的注解 /*** 分布式锁注解*/ Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) Documente…...

Ajax从零到实战

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...

编程参考 - 在C++移动构造函数声明中使用noexcept

在 C 中&#xff0c;noexcept 是用于表示函数不抛出异常的指定符。它既可用于常规函数&#xff0c;也可用于特殊成员函数&#xff0c;包括构造函数和析构函数。使用 noexcept 可以帮助编译器进行优化&#xff0c;提高代码的安全性和正确性。 In C, noexcept is a specifier use…...

Vue2/Vue3实现全局/局部添加防篡改水印的效果。删除元素无效!更改元素属性无效!支持图片、元素、视频等等。

水印目的 版权保护:水印可以在图片、文档或视频中嵌入作者、品牌或版权所有者的信息,以防止未经授权的复制、传播或使用。当其他人使用带有水印的内容时,可以追溯到原始作者或版权所有者,从而加强版权保护。 身份识别:水印可以用作作者或品牌的标识符,使观众能够轻松识…...

GuLi商城-商品服务-API-属性分组-获取分类属性分组

获取分类属性分组接口开发 操作的是这张表 造数据: 后台代码: @Override public PageUtils queryPage(Map<String, Object> params, Long catelogId) {//select * from pms_attr_group where catelog_id=? and (attr_group_id=key or attr_group_name like %key%)Stri…...

安全测试理论

安全测试理论 什么是安全测试&#xff1f; 安全测试&#xff1a;发现系统安全隐患的过程安全测试与传统测试区别 传统测试&#xff1a;发现bug为目的 安全测试&#xff1a;发现系统安全隐患什么是渗透测试 渗透测试&#xff1a;已成功入侵系统为目标的的攻击过程渗透测试与安全…...

序列化和反序列化

面试题&#xff1a;对序列化和反序列化的理解&#xff1f; 我们之所以需要序列化&#xff0c;它核心的目的是为了解决网络通信之间的对象传输的问题&#xff0c;也就是说&#xff0c;如何把当前JVM进程的一个对象&#xff0c;通过跨网络传输到另一个JVM进程里面&#xff0c;而序…...

3步解锁缠论交易:通达信可视化插件让复杂技术分析变简单

3步解锁缠论交易&#xff1a;通达信可视化插件让复杂技术分析变简单 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 缠论作为中国股市技术分析的重要理论体系&#xff0c;其核心价值在于揭示价格波动的内…...

AI 写作 + 去 AI 味:自媒体人高效涨粉密码

AI 写作 去 AI 味&#xff0c;自媒体人高效涨粉的新组合拳副标题&#xff0c;内容洪流时代&#xff0c;创作者如何同时兼顾效率、风格与平台合规&#xff1f;凌晨两点&#xff0c;北京东四环的一间合租公寓里&#xff0c;一位运营着 3 个帐号的图文博主&#xff0c;一边看着后…...

RoboStudio6.08学习记录(2)

工业机器人工作站的构建1.在文件功能选项卡中&#xff0c;选择“创建”&#xff0c;单击“创建”或“空工作站”&#xff0c;创建一个新的工作站&#xff0c;如图2-1所示。图2-1 创建新工作站2.在“基本”功能选项卡中&#xff0c;打开“ABB模型库”&#xff0c;如图2-2所示。…...

【Flutter for OpenHarmony 】三方库 infinite_scroll_pagination 鸿蒙化适配实战:列表分页加载全指南

&#x1f4f1; Flutter for OpenHarmony 三方库 infinite_scroll_pagination 鸿蒙化适配实战&#xff1a;列表分页加载全指南 欢迎加入开源鸿蒙跨平台社区&#xff1a;https://openharmonycrossplatform.csdn.net 哈喽大家好呀&#xff5e;我是一名正在学习Flutter跨平台开发…...

MouseOverShapeBox

MouseOverShapeBox MouseOverShapeBox 源码详解 - 鼠标悬停高亮标注框 这是一个增强版图像标注控件&#xff0c;当鼠标移动到形状上时&#xff0c;会高亮显示该形状。类似于图片标注工具中鼠标悬停时边框变色的效果。&#x1f4c4; 文件头部&#xff08;版权信息&#xff09; /…...

Pixel Mind Decoder 版本管理与协作:Git工作流在AI项目中的应用

Pixel Mind Decoder 版本管理与协作&#xff1a;Git工作流在AI项目中的应用 1. 为什么AI项目需要版本管理 在开发Pixel Mind Decoder这样的情绪分析系统时&#xff0c;我们会频繁修改代码、调整Prompt模板、更新模型参数。如果没有版本管理&#xff0c;很容易陷入混乱&#x…...

如何用11款开源字体解锁创作可能?宝藏资源轻松上手游戏文字设计

如何用11款开源字体解锁创作可能&#xff1f;宝藏资源轻松上手游戏文字设计 【免费下载链接】HoYo-Glyphs Constructed scripts by HoYoverse 米哈游的架空文字 项目地址: https://gitcode.com/gh_mirrors/ho/HoYo-Glyphs 你是否曾在创作同人作品时&#xff0c;苦于找不…...

10个专业OSINT硬件设备方案:打造终极情报收集工作站

10个专业OSINT硬件设备方案&#xff1a;打造终极情报收集工作站 在开源情报(OSINT)领域&#xff0c;专业的硬件设备能够大幅提升数据收集效率和分析深度。本文将介绍10种专门用于情报收集的硬件方案&#xff0c;帮助您构建强大的OSINT工作站。&#x1f916; 为什么需要专用OSIN…...

OpenClaw v2026.4.1 深度剖析报告:任务系统、协作生态与安全范式的全面跃迁

摘要本报告旨在对 OpenClaw 于 2026 年 4 月 2 日发布的 v2026.4.1 版本进行一次全面、深入、颗粒度至极的技术与战略解构。该版本由 30 余位社区贡献者共同完成&#xff0c;标志着 OpenClaw 在经历了 3 月份“架构重塑”与“安全加固”的底层革命后&#xff0c;正式迈入“体验…...

Freqtrade实盘避坑手册:我用这个开源框架3个月跑通加密货币策略

Freqtrade实盘避坑手册&#xff1a;3个月实战打磨的加密货币策略进阶指南 当第一次在Binance交易所看到自己开发的量化策略自动执行交易时&#xff0c;那种程序化交易带来的震撼感至今难忘。Freqtrade作为开源框架中的佼佼者&#xff0c;确实为个人开发者提供了从回测到实盘的完…...