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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/45051.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45051.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45051.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法學習筆記(8.3)-(0-1背包問題)

目錄 最常見的0-1背包問題&#xff1a; 第一步&#xff1a;思考每輪的決策&#xff0c;定義狀態&#xff0c;從而得到dp表 第二步&#xff1a;找出最優子結構&#xff0c;進而推導出狀態轉移方程 第三步&#xff1a;確定邊界條件和狀態轉移順序 方法一&#xff1a;暴力搜素…

KBS(Knowledge-Based Systems)期刊投稿記錄

記錄一些關鍵時間節點 2023.12.31 投稿 2024.01.30 返回審稿意見 2024.05.20 提交r1 2024.05.31 返回審稿意見(conditional accept)包括語言潤色 2024.06.09 提交r2&#xff0c;沒有使用愛思維爾的潤色 2024.06.10 with editor 2024.06.13 under review 2024.06.24 revise(折磨…

MFC之對話框--線寬/線型/顏色

文章目錄 線寬輸入實現優化無法記錄上一次線粗問題 線寬滑動實現實現選擇線類型實現顏色選擇總結 線寬輸入實現 優化無法記錄上一次線粗問題 線寬滑動實現 實現選擇線類型 實現顏色選擇 總結 1。創建新窗口&#xff08;dialog)會創建一個新的類&#xff0c;在類中實現窗口中的…

vue中父子傳遞屬性值

1、父傳子屬性值 自定義圖庫組件 在add.vue中應用tuku組件并給默認值 效果 2、 子傳父&#xff0c;逆向賦值 add.vue和第一問中一樣 修改tuku組件&#xff0c;傳值給add.vue 3、多個傳遞 效果&#xff1a; 點擊兩個修改按鈕后 4、使用defineModel簡化父子傳值 其他代碼跟…

【postgresql】時間函數和操作符

日期/時間操作符 加減操作符&#xff1a; 和 - 可以用于日期、時間、時間戳和時間間隔的加減操作。 SELECT 2024-01-01::date INTERVAL 1 day as "date"; ; -- 結果&#xff1a;2024-01-02SELECT 2024-01-01 12:00:00::timestamp - INTERVAL 2 hours as "…

概率論原理精解【2】

文章目錄 笛卡爾積任意笛卡爾積投影映射概述詳解一一、定義二、性質三、應用四、結論 詳解二定義與性質應用與意義示例結論 參考文獻 笛卡爾積 任意笛卡爾積 { A t , t ∈ T } \{A_t,t \in T\} {At?,t∈T}是一個集合族&#xff0c;其中T為一個非空指標集&#xff0c;稱 t ∈…

CSS上下懸浮特效

要實現一個上下懸浮的特效&#xff0c;可以使用CSS的keyframes規則和動畫屬性。以下是一個簡單的示例&#xff1a; 代碼示例 /* 定義一個名為floating的動畫 */ keyframes floating {0% {transform: translateY(0); /* 初始位置 */}50% {transform: translateY(-4px); /* 向上…

M1000 4G藍牙網關:高速穩定,賦能物聯網新體驗

桂花網M1000的4G移動網絡功能主要體現在以下幾個方面&#xff1a; 一、高速穩定的數據傳輸 高速率&#xff1a;M1000支持4G移動網絡&#xff0c;能夠實現高速的數據傳輸。根據4G網絡的技術標準&#xff0c;其理論上的最大下行速率可達到數百Mbps&#xff08;如TD-LTE在20MHz帶…

KALI使用MSF攻擊安卓設備

這期是kali使用MSF進行安卓滲透的保姆級別教程&#xff0c;話不多說&#xff0c;直接開始。 準備材料&#xff1a; 1.裝有kali的實體機或虛擬機&#xff08;這里用實體機進行演示&#xff09; 2.一臺安卓10.0以下的手機 打開kali&#xff0c;先用ifconfig查看自己的kali IP地址…

Python3極簡教程(一小時學完)下

目錄 PEP8 代碼風格指南 知識點 介紹 愚蠢的一致性就像沒腦子的妖怪 代碼排版 縮進 制表符還是空格 每行最大長度 空行 源文件編碼 導入包 字符串引號 表達式和語句中的空格 不能忍受的情況 其他建議 注釋 塊注釋 行內注釋 文檔字符串 版本注記 命名約定 …

[BJDCTF2020]EasySearch1

知識點&#xff1a; 1.swp泄露 2.md5碰撞 3.PHP代碼審計 4.SSI代碼執行漏洞 // Apache SSI 遠程命令執行漏洞復現 看著像sql注入&#xff0c;不過注入無果&#xff0c;掃一下目錄試試~ 發現是swp泄露. SWP文件泄露漏洞是指在使用 Vim編輯器 編輯一個文件時&#xff0c;Vim會在…

codeforce 954 div3 G2題

思路&#xff1a; 質因子分解可以順著分解&#xff0c;也可以逆著分解 即找到每一個數字的倍數&#xff0c;再找到每一個數字的因數 const int N 5e510; vector<int> ff[N]; vector<int> f[N]; vector<int> g[N];void solve(){int n;cin>>n;vector&l…

OpenCV漫水填充函數floodFill函數的使用

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 功能描述 ffloodFill函數是OpenCV庫中用于圖像處理的一個功能&#xff0c;它用于填充與種子點顏色相近的連通區域。這個函數在很多場景下都非常有用&#x…

MUR2060CTR-ASEMI無人機專用MUR2060CTR

編輯&#xff1a;ll MUR2060CTR-ASEMI無人機專用MUR2060CTR 型號&#xff1a;MUR2060CTR 品牌&#xff1a;ASEMI 封裝&#xff1a;TO-220 批號&#xff1a;最新 最大平均正向電流&#xff08;IF&#xff09;&#xff1a;20A 最大循環峰值反向電壓&#xff08;VRRM&#…

【數據結構】線性表----隊列詳解

1. 隊列的基本概念 話不多說&#xff0c;直接開始&#xff01; 隊列是一種線性數據結構&#xff0c;同棧類似但又不同&#xff0c;遵循先進先出&#xff08;FIFO, First In First Out&#xff09;的原則。換句話說&#xff0c;最先進入隊列的元素會最先被移除。這樣的特點使得…

小白學python(第七天)

哈哈&#xff0c;這個系列的文章也有一段時間沒更新&#xff0c;主要是最近在忙c嘎嘎&#xff0c;不過沒事接下來會優先更python啦&#xff0c;那么我們先進入正題吧 函數的定義及調用 函數定義 格式&#xff1a;def 函數名&#xff08;形參列表&#xff09;&#xff1a; 語…

QTabWidget、QListWidget、QStackedWidget

The QTabWidget class provides a stack of tabbed widgets. More... The QListWidget class provides an item-based list widget. More... QStringList strlist;strlist<<"系統"<<"外觀"<<"截圖"<<"貼圖"…

.NET MAUI開源架構_4..NET MAUI 應用支持的平臺

可以針對以下平臺編寫 .NET Multi-platform App UI (.NET MAUI) 應用&#xff1a; 需要 Android 5.0 (API 21) 或更高版本。需要 iOS 11 或更高版本使用 Mac Catalyst 的 macOS 11 或更高版本。Windows 11 和 Windows 10 版本 1809 或更高版本&#xff0c;使用 Windows UI 庫 …

Java的高級特性

類的繼承 繼承是從已有的類中派生出新的類&#xff0c;新的類能擁有已有類的屬性和行為&#xff0c;并且可以拓展新的屬性和行為 public class 子類 extends 父類{子類類體 } 優點 代碼的復用 提高編碼效率 易于維護 使類與類產生關聯&#xff0c;是多態的前提 缺點 類缺乏獨…

c/c++ 打印調用棧

打印調用棧可以在程序出現死機的時候&#xff08;如出現 SIGABRT、SIGSEGV等一些信號錯誤&#xff09;是很有用的信息&#xff0c;有可能就不需要 core file 來協助排查問題了。通過 man backtrace 可以得到一個例子的源碼&#xff1a; #define SIZE 100 static void backTrac…