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操作:
- 拉取master最新代码 git pull
- 切换到feature分支
- 执行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来完成。
- 拉取
feature-a最新代码; - 复制分支
feature-b到feature-b-bak; - 对
feature-b执行reset --hard到feature-a的最早commit之前的一次commit; - 在
feature-b中cherry-pick新的feature-a的commit - 在
feature-b中cherry-pick复制的feature-b-bak的自己的commit
reset --hard | cherry-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是一款分布式版本控制系统(VSC),是团队合作开发…...
人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解
大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解。回归分析是统计学和机器学习中的一种重要方法,用于研究因变量和自变量之间的关系。在机器学习中,回归算法被广泛应用于…...
智能制造热点词汇科普篇——工业微服务
随着互联网技术的不断发展,近十年来,微服务也逐渐走进人们的视线中来。何为微服务?让我们先来看看百度百科上的定义:微服务(或称微服务架构)是一种云原生架构方法,在单个应用中包含众多松散耦合…...
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探秘:内存模型与管理初探 第二章 Java核心篇之JVM探秘:对象创建与内存分配机制 第三章 Java核心篇之JVM探秘:垃圾回收算法与垃圾收集器 第四章 Java核心篇之JVM调优实战:Arthas工具使用及…...
未来互联网的新篇章:深度解析Facebook的技术与战略
随着科技的飞速发展和社会的不断变迁,互联网作为全球信息交流的重要平台,正经历着前所未有的变革和演进。作为全球最大的社交媒体平台之一,Facebook不仅是人们沟通、分享和互动的重要场所,更是科技创新和数字化进程的推动者。本文…...
MySQL卸载 - Windows版
MySQL卸载 - Windows版 1. 停止MySQL服务 winR 打开运行,输入 services.msc 点击 “确定” 调出系统服务。 2. 卸载MySQL相关组件 打开控制面板 —> 卸载程序 —> 卸载MySQL相关所有组件 3. 删除MySQL安装目录 4. 删除MySQL数据目录 数据存放目录是在 …...
Java核心篇之JVM探秘:对象创建与内存分配机制
系列文章目录 第一章 Java核心篇之JVM探秘:内存模型与管理初探 第二章 Java核心篇之JVM探秘:对象创建与内存分配机制 第三章 Java核心篇之JVM探秘:垃圾回收算法与垃圾收集器 第四章 Java核心篇之JVM调优实战:Arthas工具使用及…...
Nuxt框架中内置组件详解及使用指南(五)
title: Nuxt框架中内置组件详解及使用指南(五) date: 2024/7/10 updated: 2024/7/10 author: cmdragon excerpt: 摘要:本文详细介绍了Nuxt框架中和组件的使用方法与配置,包括安装、基本用法、属性详解、示例代码以及高级功能如…...
python开发遇到的坑汇总
文章目录 1.点击导入操作,所有配置全没了 1.点击导入操作,所有配置全没了 在 PyCharm 中,如果你遇到了点击导入(import)操作后,项目似乎进行了重新安装或重新部署的情况,这通常不是由简单的导入…...
【线性表,线性表中的顺序表和链表】
目录 1、线性表的定义和基本操作1.1、线性表的定义1.2、线性表的基本操作 2、顺序表和链表的比较2.1、顺序表2.1.1、顺序表的定义和特点2.1.2、顺序表的实现(1)顺序表的静态分配:(2)顺序表的动态分配 2.1.3、顺序表的基…...
46 mysql 客户端拿不到具体的错误信息
前言 这是最近碰到的一个问题 同样的一个 环境的问题, 在正常的 mysql 环境会返回 具体的错误信息, 然后 在我的另外一个环境里面 只能返回一些 unknown error 之类的 十分抽象的环境 然后 我们这里 来看一下 具体的情况 我们这里从 错误的环境 往前推导 来查看 并解决这个…...
Java语言程序设计——篇三(2)
循环结构 概述1️⃣while循环例题讲解 2️⃣do-while循环例题讲解 🚩while循环与do-while循环区别3️⃣for循环例题讲解 4️⃣循环的嵌套🏮例题讲解 概述 ⭐️Java语言提供了4种循环结构: (1) while循环 (2) do-while循环 (3) for循环 (4)增…...
如何实现一个分布式锁
如何实现一个分布式锁 本篇内容主要介绍如何使用 Java 语言实现一个注解式的分布式锁,主要是通过注解AOP 环绕通知来实现。 1. 锁注解 我们首先写一个锁的注解 /*** 分布式锁注解*/ Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) Documente…...
Ajax从零到实战
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
编程参考 - 在C++移动构造函数声明中使用noexcept
在 C 中,noexcept 是用于表示函数不抛出异常的指定符。它既可用于常规函数,也可用于特殊成员函数,包括构造函数和析构函数。使用 noexcept 可以帮助编译器进行优化,提高代码的安全性和正确性。 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…...
安全测试理论
安全测试理论 什么是安全测试? 安全测试:发现系统安全隐患的过程安全测试与传统测试区别 传统测试:发现bug为目的 安全测试:发现系统安全隐患什么是渗透测试 渗透测试:已成功入侵系统为目标的的攻击过程渗透测试与安全…...
序列化和反序列化
面试题:对序列化和反序列化的理解? 我们之所以需要序列化,它核心的目的是为了解决网络通信之间的对象传输的问题,也就是说,如何把当前JVM进程的一个对象,通过跨网络传输到另一个JVM进程里面,而序…...
Unity零基础入门指南:借助快马AI生成你的第一个可交互3D场景
Unity零基础入门指南:借助快马AI生成你的第一个可交互3D场景 作为一个刚接触Unity的新手,我完全理解那种面对空白项目时的迷茫感。好在最近发现了InsCode(快马)平台,它让我这个编程小白也能快速创建出像模像样的3D交互场景。下面我就分享一下…...
DVWA SQL 注入:两种查表字段 Payload 结果差异详解
一、问题引入在 DVWA Medium 级别 SQL 注入实验中,我们通过 Burp Suite 抓包改包,对users表字段进行查询时,会遇到两种看似不同的执行结果:图 1:逐行展示users表的每一个字段名图 2:一行展示user表的所有字…...
Boss-Key终极指南:3秒掌握职场隐私保护的秘密武器
Boss-Key终极指南:3秒掌握职场隐私保护的秘密武器 【免费下载链接】Boss-Key 老板来了?快用Boss-Key老板键一键隐藏静音当前窗口!上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 在现代职场环境中࿰…...
3个高效技巧:用Elsevier Tracker实现投稿状态智能监控
3个高效技巧:用Elsevier Tracker实现投稿状态智能监控 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 你是否也曾经历过这样的科研日常:每天打开Elsevier投稿系统,重复登录、点击…...
3步解锁缠论交易:通达信可视化插件让复杂技术分析变简单
3步解锁缠论交易:通达信可视化插件让复杂技术分析变简单 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 缠论作为中国股市技术分析的重要理论体系,其核心价值在于揭示价格波动的内…...
如何快速掌握LeaguePrank:英雄联盟客户端个性化修改完整指南
如何快速掌握LeaguePrank:英雄联盟客户端个性化修改完整指南 【免费下载链接】LeaguePrank 项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank 想要在英雄联盟客户端中展示独特的个人风格吗?LeaguePrank是一个基于LCU API的英雄联盟客户…...
如何用OpenRPA实现企业级流程自动化?开源RPA工具完整指南
如何用OpenRPA实现企业级流程自动化?开源RPA工具完整指南 【免费下载链接】openrpa Free Open Source Enterprise Grade RPA 项目地址: https://gitcode.com/gh_mirrors/op/openrpa 在数字化转型浪潮中,企业面临着效率瓶颈与成本压力的双重挑战。…...
OpenClaw版本升级:Qwen3-4B模型与新框架特性的兼容性
OpenClaw版本升级:Qwen3-4B模型与新框架特性的兼容性 1. 为什么需要关注版本升级 上周五晚上11点,我的OpenClaw突然弹出一条警告:"当前版本(v0.8.3)将在48小时后停止维护"。这个深夜警报让我意识到,是时候处理这个技术…...
Ostrakon-VL终端教程:终端日志记录与扫描任务审计追踪
Ostrakon-VL终端教程:终端日志记录与扫描任务审计追踪 1. 像素特工终端简介 Ostrakon-VL终端是一款专为零售与餐饮行业设计的智能扫描工具,它将复杂的图像识别任务转化为直观有趣的"数据扫描任务"。与传统工业级UI不同,这款终端采…...
【2024大厂AI基础设施面试压轴题】:手写Cuvil自定义Op注册+自动融合Pass(附可运行验证代码)
第一章:Cuvil 编译器在 Python AI 推理中的应用 面试题汇总Cuvil 是一款面向 AI 推理场景的轻量级领域专用编译器(DSL Compiler),专为优化 Python 中基于 PyTorch/TensorFlow 模型的部署而设计。它通过静态图重写、算子融合与硬件…...






