簡單的GIT操作學習記錄

Git 版本控制基本使用

1.Idea版本共計基本操作

公司使用Git作為代碼版本管理工具,平時使用非常頻繁這里簡單整理方便后續學習查看

1.1 merge未推送回滾

我們代碼merge操作后,并且沒有推送到遠端,本地項目發現有推送箭頭,可以使用 Reset Current branch to Here… 將分支回退到merge之前。

image-20250325100530129

image-20250325100625229

注意:這是代碼未推送到遠端,既未push時候的操作。

1.2 merge推送到遠端后回滾

我們代碼如果推送到了遠端,那么我們就需要強制回退了,需要使用 --force命令進行回退了,具體操作步驟如下

  • 我們首先使用 Reset Current branch to Here… ,回退時候會提示選擇那種回退,我們選擇 hard 類型,將本地分支代碼指向要回退的提交處,并且我們這種回退需要跟其他同事溝通,因為回退會影響其他人的提交。我們 Reset 之后在項目上會發現本地版本落后遠端代碼,會提示可以下載遠端代碼。

    image-20250325100625229

    image-20250325100848651

    image-20250325101004128

  • 我們本地回退到要回退的提交點時,我們再通過git進行強制回退提交,在提交頁面選擇 Force push 的選項,然后進行提交,既本地代碼將會覆蓋遠端代碼,既回退操作。

    image-20250325095036582

    image-20250325100108838

    image-20250325100130528

1.3 部分代碼合并

有很多時候,我們的需求可能只是修改一兩個文件,或者很少的文件,修改后我們要合并到 UAT 或者 SIT 測試環境,此時我們從生產拉取的代碼與生產 master 在其他文件有沖突,此時我們如果只想合并我們某一個或者幾個提交,那么我們可以使用 Cherry-pick 功能進行基于commit 級別的合并,這樣只會合并提交部分代碼,避免了整個項目 merge 引起的沖突配置問題。具體操作如下:

  • 我們在業務分支進行代碼修改,具體修改內容信息如下

    image-20250325101944646

  • 代碼修改后,我們切換到要并入代碼的分支

    image-20250325102033021

  • 切換之后我們點擊左下角的git按鈕,展示git提交目錄信息,然后在左上角的搜索分支框中填入我們的業務分支索引信息既 CCMS 搜索到自己的業務分支

    image-20250325102325456

  • 雙擊之后,我們找到了剛剛提交的記錄信息,ceshi 提交,然后我們右鍵選擇 Cherry-pick 選項,即可檢出我們的ceshi提交內容到當前分支,如果有沖突解決,沒有沖突的話我們直接push 到遠端即可完成代碼的合并處理。

    image-20250325102532625

    image-20250325102604045

    image-20250325102646653

    image-20250325102705821

2. 客戶端基礎操作

Git客戶端操作相對簡單一些,我們在項目的目錄打開客戶端,shift + 右鍵,選擇 git bash,可以觀察當前項目是什么分支,然后可以使用客戶端進行操作

image-20250325103105316

2.1 版本回退

使用命令行窗口我們同樣可以實現代碼版本操作,具體操作實現如下

  • 我們可以使用git logs,查看當前branch 的git 操作日志,從而獲取我們的 commit id 信息,此處我們可以看到 ceshi 提交的版本信息

    git log
    

image-20250325104120528

  • 我們要回滾 ceshi 版本信息,那么我們就要獲取測試之前的最后一版 commt id , 既 88f5559dcca3b243bb65b488c8cd0af82fe15965
    image-20250325104429309

  • 有了提交id之后,我們需要進行本地回滾操作既使用 git reset --hard commit-id 命令,執行之后,在 Idea中觀察代碼,發現分支也進行了本地回退。

    git reset --hard commit-id
    

    image-20250325104622583
    image-20250325104953085

  • 之后執行強制提交,執行命令 git push origin your-branch-name --force,執行此代碼將本地回滾內容強制推送到遠端服務中,出現如下提示既遠端代碼回滾推送成功

    git push origin your-branch --force
    

image-20250325105344081

2.2 代碼合并追蹤

我們有時候會發現,有一些代碼不應該出現在一個分支上,比如我有一個分支 branch-A,修改了部分內容,進行了提交commit-A,然后合并到了 sit 上,那么我們的修改 commit-A 記錄應該出現在 branch-Asit 上面,但是現在發現我們的 uat 分支也出現了 commit-A 修改的代碼,那么這個代碼就是被人錯誤的合并到了自己分支然后推送到 uat分支,要么就是被人直接錯誤合并到 uat 分支。

那么我們應該如何查找到底是誰如何操作到 uat 分支上呢,如果是有人將代碼合并到自己分支,然后再將代碼 mergeuat ,那么我們找到此人自己分支觀察git 提交記錄即可,如果是直接合并到 uat ,那么直接觀察 uat 分支即可

  • 我們首先要更新自己本地所有git引用信息

    # --all 獲取所有遠程倉庫的最新引用
    # --prune 自動清理已刪除的遠程分支引用
    git fetch --all --prune
    
  • 我們首先找到對應的代碼信息,比如為 WorkFlowJumpServiceImpl 類的 156行到176行信息為錯誤信息,那么我們在同目錄中打開git窗口

    image-20250325110100179

    image-20250325110123259

    image-20250325110151023

  • 之后我們執行命令 git blame WorkFlowJumpServiceImpl.java -L 156,176 ,此時我們可以看到每行的 commit id

    git blame yourClass.java -L rowNumA,rowNumB
    

    image-20250325110333107

  • 之后我們需要確定哪些分支擁有這些 commit-id,此處為舉例,正常新的業務應該只有 自己新增分支,合并測試分支 兩個分支包含此提交,其他分支應該沒有,如果有則證明該分支有人誤操作合并此代碼到此分支,此處我們找到對應分支查找提交記錄即可,就可以知道代碼是如何被提交到錯誤分支的,我們使用命令 git branch --contains commitId 即可觀察哪些分支包含此提交

    # -a 參數顯示本地 + 遠程分支
    git branch -a --contains commitId
    

    image-20250325111439052

  • 找到包含的 分支 后,切換到問題分支,查看 git 操作記錄,了解代碼是如何添加到錯誤分支的,此處我們使用idea進行查看更加方便,此處為查詢是否有uat代碼合并到了業務分支。

    image-20250325151419681

2.3 生產Tag回退

我們在完整推送后端代碼后需要新增一個記錄Tag標簽,標注此次上線內容,此Tag標簽會作為回滾的標記點,作為未來回退版本依據。注意Tag不是一個brunch分支,只是一個當前提交點的一個鏡像,Tag 不會隨著 git commit 自動更新,它是靜態的。Tag 通常用于標識“穩定版本”,例如軟件發布的版本號。方便回溯版本。

我們只對master做Tag標記,具體格式為VyyyyMMdd.兩位序列號 eg: master-V20250630.01

image-20250630141724912

填寫此次上線的具體上線內容描述,之后會作為回滾的依據條件,方便后續回滾了解回滾詳情

image-20250630141821401

新增Tag完畢之后的效果如下:

image-20250630142829089

如果上線發現需要回退,那么我們首先獲取需要回退tag的最后提交commit-id,根據commit-id進行回退,我們可以使用如下命令獲取commit-id

# --all 獲取所有遠程倉庫的最新引用
# --prune 自動清理已刪除的遠程分支引用
git fetch --all --prune
# 展示信息
git show master-V20250630.01
# 或者
git rev-parse master-V20250630.01^{commit}

image-20250630142105016

之后我們切換分支到master,然后進行回退rollback操作,最后推送修改后master代碼到遠端即可

# 切換為master分支
git checkout master#  強制回退
git reset --hard 80a291da28650d62a48566942ae08a85eb2c6402# 推送到遠端
git push origin master --force

注意:如果我們回退版本不確定,我們可以使用模糊命令查看Tag注釋信息,可以快速定為到需要找到的版本Tag進行回滾

# 查找 master-V2025 開頭的Tag信息 
git tag -l "master-V2025*" | xargs -I {} git show {}

image-20250703170009865

2.4 其他操作

如果我們在Cherry-pick 操作過程中,已經Cherry-pick完畢了,但是代碼沒有進行push 操作,發現選錯了分支,那么我們可以使用 git cherry-pick --abort命令來取消Cherry-pick操作。

git cherry-pick --abort

同樣的我們 merge操作發現選錯了分支,并且沒有push到遠端,同樣可以使用 git merge --abort 命令或者使用 idea 選擇 git merge abort 操作進行回退

git merge --abort

image-20250325111909259

2.5 git命令總結

--------------------------------------簡單提交--------------------------------------
git add .
git commit -m 'commit message'
git push origin 'your brunch name'
--------------------------------------刪除分支--------------------------------------
# 刪除分支
git branch -d your-branch
# 如果該分支有未合并的更改,Git 會提示錯誤。若仍想強制刪除該分支,可以使用 -D 參數:
git branch -D your-branch
# 推送刪除到遠程倉庫
git push origin --delete your-branch--------------------------------------分支改名--------------------------------------
# 重命名分支
git branch -m SIT2-RULE-20250805-基礎拖拽規則提取-lxc# 推送新分支并設置上游
git push origin -u SIT2-RULE-20250805-基礎拖拽規則提取-lxc# 刪除舊分支
git push origin --delete SIT2_NEW--------------------------------------代碼回滾--------------------------------------
# 查看提交歷史,找到上一個版本的commit_ID
git log# 切換到你想要回退的分支
git checkout your-branch# 將分支回退重置到commit-id版本
git reset --hard commit-id
git reset --hard 241d20a0d94090f97244a7f51cb69eee683ae5d8# 強制推送到遠端倉庫
git push origin your-branch-name --force--------------------------------------取消操作--------------------------------------
# pick 取消
git cherry-pick --abort# merge 取消
git merge --abort--------------------------------------代碼合并追蹤--------------------------------------
git blame youClass.java -L rowNumA,rowNumB
git branch --contains commitId--------------------------------------代碼版本Tag管理--------------------------------------
# --all 獲取所有遠程倉庫的最新引用
# --prune 自動清理已刪除的遠程分支引用
git fetch --all --prune# 項目發布后需要新增一個 tag, 格式為VyyyyMMdd.序列號 eg: master-V20250630.01,后續版本回滾依賴此Tag信息# 回滾操作獲取tag分支最后提交的commit-id eg: 80a291da28650d62a48566942ae08a85eb2c6402
git rev-parse master-V20250630.01^{commit}
# 或者使用
git show master-V20250630.01# 切換為master分支
git checkout master#  強制回退
git reset --hard 80a291da28650d62a48566942ae08a85eb2c6402# 推送到遠端
git push origin master --force# 刪除標簽,先刪除本地然后刪除遠端
git tag -d master-20250627-image-tag
git push origin --delete tag master-20250627-image-tag# 模糊查詢Tag注釋信息
git tag -l "master-V2025*" | xargs -I {} git show {}

3. GitLab代碼加解密

我們有這樣一個需求,就是我們需要使用外圍服務的gitlab進行代碼開發,代碼是公司的知識產權,我們不想外圍獲取我們的代碼源碼信息,那么我們就是需要將GitLab代碼進行加密處理,此處簡單記錄一下方便后續使用。

我們使用的工具是 git-crypt 對提交的文件進行可配置化的加密解密,git-crypt 是一款開源的 Git 倉庫加密工具,主要用于對敏感文件進行透明加密,確保只有持有密鑰的用戶才能訪問加密內容,同時不影響非加密文件的正常讀寫。具體的操作步驟如下:

3.1 基礎環境

我們需要準備Git環境,我將Git安裝在了D盤的目錄下,之后我們需要下載 git-crypt,并且將exe文件放置到Git的cmd目錄中,下載地址在此

image-20250903092747522

下載后放置到我們的Git對應cmd目錄中

image-20250903092919374

之后,我們下載我們 GitLab 測試的項目 git-crypt 到本地,導入到idea中

image-20250903093237301

3.2 準備git-crypt環境

我們打開GitBash,進入到導入項目的工作目錄,執行初始化命令,因為我已經執行過一次所以有以下提示

# 初始化git-crypt
git-crypt init

image-20250903093516260

初始化之后我們要設置加密文件到本地磁盤中,協同開發的時候,該文件需要共享到他人,一定要需要保存好,具體操作如下

# 生成文件keyFile 到D:\crypt-key-file\ 目錄中
git-crypt export-key /d/crypt-key-file/keyFile

image-20250903093825872

生成秘鑰文件之后,我們需要設定具體哪些文件需要進行加密解密,此處我們需要在項目根目錄生成一個 .gitattributes 文件,里面配置具體哪些文件需要進行加解密,語法為 : 文件名或文件范圍 filter=git-crypt diff=git-crypt 配置規則示例如下所示:

# 將特定目錄下 .java結尾文件加解密
src/main/java/cn/git/crypt/**/*.java filter=git-crypt diff=git-crypt
# 將Git開頭文件加解密
Git* filter=git-crypt diff=git-crypt
# 將Git目錄下所有文件加解密
Git/** filter=git-crypt diff=git-crypt

此處我們選擇的配置為只加密固定目錄下的全部java文件,項目目錄如下所示

src/main/java/cn/git/crypt/**/*.java filter=git-crypt diff=git-crypt

image-20250903094458728

3.3 代碼加密提交

環境設置好后,我們現在修改代碼進行提交,觀察一下代碼在git環境是否已經進行加密。我們修改了三個文件兩個在crypt目錄下(既配置加密的目錄),Test文件沒有在目錄下

image-20250903094838592

我們執行 git-crypt status / git-crypt status -f 命令可以看到哪些文件提交會被加密,哪些不會。

注意:只有在文件被修改并重新添加到暫存區時,才會被git-crypt status 命令掃描。

# 我們使用git-crypt status即可
# git-crypt status -f
git-crypt status

git-crypt status -f 與 git-crypt status 的區別

  • git-crypt status:顯示詳細的狀態信息,列出所有受管理的文件及其當前狀態(加密/解密),提供更完整的輸出信息。

  • git-crypt status -f:

    -f 參數表示 “fast” 或 “force” 模式,提供更簡潔的輸出,通常只顯示文件列表。執行速度更快,不進行詳細的狀態檢查,主要用于快速查看哪些文件被 git-crypt 管理。

執行效果如下:

image-20250903095653277

之后我們提交修改代碼到遠程服務

image-20250903095811360

3.4 查看GitLab

我們登錄我們GitLab賬號,進入到加密項目對應文件中查看三個修改文件,具體結果如下,發現配置的目錄下兩個文件都已經加密,Test文件未加密

image-20250903100041099

image-20250903100112162

image-20250903100129135

3.5 GitLab代碼解密

首先需要解密的電腦上同樣需要安裝Git工具以及git-crypt工具,安裝步驟與加密步驟一致。同時解密需要使用我們之前的加密秘鑰文件 keyFile,我們先將GitLab中的加密項目克隆到本地

image-20250903100511417

image-20250903100614366

然后進入到克隆的git-crypt 項目中,發現文件被加密了

image-20250903100803833

之后我們需要進入到倉庫根目錄,執行解密操作

# 注意 后面的目錄修改成自己放置keyFile文件的目錄地址
git-crypt unlock /d/crypt-key-file/keyFile

image-20250903101145357

執行后我們再查看代碼部分,文件成功解密成功

image-20250903101229587

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

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

相關文章

Spring Boot 與前端文件下載問題:大文件、斷點續傳與安全校驗

前言在企業級 Spring Boot 項目中,文件下載 是非常常見的功能場景:用戶下載報表、合同、發票 PDF下載圖片、音視頻資源系統導出大規模 Excel/CSV 數據然而,很多開發者在實現文件下載時,會遇到 下載失敗、文件損壞、性能瓶頸、斷點…

主板硬件研發基礎--HDMI工作原理

HDMI 接口 技術原理:HDMI 接口采用 TMDS 技術傳輸數字信號,不僅可以傳輸高清視頻信號,還能同時傳輸多聲道音頻信號。它支持 EDID 和 DDC2B,設備之間能夠自動協商并選擇最合適的視頻 / 音頻格式,實現 “即插即用” 功能。 接口類型:常見的有標準 HDMI 接口、Mini-HDMI 接口…

`Object.groupBy`將數組中的數據分到對象中

Object.groupBy 將一個對象或者數組的元素按照規則分組, 返回一個新對象, Object.groupBy(items, callbackFn) items:要分組的對象或數組(通常是數組)。 callbackFn(element, index, array):回調函數&#…

反序列化漏洞詳解

用途限制聲明,本文僅用于網絡安全技術研究、教育與知識分享。文中涉及的滲透測試方法與工具,嚴禁用于未經授權的網絡攻擊、數據竊取或任何違法活動。任何因不當使用本文內容導致的法律后果,作者及發布平臺不承擔任何責任。滲透測試涉及復雜技…

SQL數據分析原代碼--創建表與簡單查詢

CREATE TABLE:創建表,定義字段名、類型、注釋INSERT INTO:插入數據,支持單條或批量插入SELECT:查詢數據,*表示所有字段,AS可起別名,DISTINCT去重WHERE:條件篩選&#xff…

k8s查詢ServiceAccount有沒有列出 nodes 的權限

要檢查 ServiceAccount xxxxxx:default 是否具有列出 nodes 的權限,可以使用以下方法:1. **使用 kubectl auth can-i 命令**這是最直接的方法,可以檢查特定用戶或 ServiceAccount 是否具有特定權限:kubectl auth can-i list nodes…

調試Python程序時,控制臺一直打印SharedMemory read faild

from tkinter import filedialog filedialog.askopenfilename()在使用 tkinter 時,只要一處罰,控制臺就不停打印 SharedMemory read faild ,雖然能用,但是大大的破壞了調試體驗,看到如下的提示,你說煩不煩&…

QRCode React 完全指南:現代化二維碼生成解決方案

前言 在數字化時代,二維碼已經成為連接線上線下的重要橋梁。無論是分享鏈接、支付碼、還是身份驗證,二維碼都扮演著不可或缺的角色。qrcode.react 是一個專門為 React 應用設計的二維碼生成庫,它能夠快速、靈活地生成各種樣式的二維碼&#…

xxe外部實體注入漏洞

https://owasp.org/www-project-top-ten XXE基礎 xxe外部實體注入 外部實體 xml(用于傳輸和存儲數據) html(用于顯示數據) 注入: SQL注入:用戶輸入數據被當做代碼執行 1輸入點 2.輸入數據可以結合到數據庫…

ros2獲取topic信息解析

ros2 ros_discovery_info topic 發布邏輯疑問: 在運行ros2 topic info -v /topic時,運行的是p3,如何與p1進程通訊的呢? 進程間理論上應該是IPC

FFmpeg合成mp4

本章主要介紹如何使用FFmpeg來將一個音頻文件和一個視頻文件合成一個MP4文件,以及在這個過程中我們如何對編碼過程進行封裝以及sample_rate 重采樣的過程(由于提供的音頻文件的編碼類型為S16,所以我們需要轉化為MP4支持的FLTP浮點類型&#x…

第十九章 使用LAMP架構部署動態網站環境

第十九章 使用LAMP架構部署動態網站環境 文章目錄第十九章 使用LAMP架構部署動態網站環境一、安裝Httpd服務1、安裝httpd服務2、啟動httpd服務3、設置允許通過防火墻4、驗證http服務是否成功二、安裝Mariadb服務1、安裝Mariadb服務2、啟動Mariadb服務三、安裝PHP服務1、列出可用…

Selenium應用中的核心JavaScript操作技巧

Selenium是一款強大的瀏覽器自動化測試工具,其操作瀏覽器的能力部分來自于其內嵌的JavaScript執行引擎。這使得Selenium不僅能夠模擬用戶在瀏覽器中的各種操作,還能執行復雜的JavaScript腳本,以實現更為精細的控制。本文將探討如何通過Seleni…

《Linux 基礎指令實戰:新手入門的命令行操作核心教程(第一篇)》

前引:當你第一次面對 Linux 系統中那片閃爍著光標、只有黑白字符的終端界面時,或許會和很多初學者一樣感到些許茫然:這些由字母和符號組成的 “指令” 究竟該如何輸入?它們又能完成哪些神奇的操作?其實,Lin…

03.【Linux系統編程】基礎開發工具1(yum軟件安裝、vim編輯器、編輯器gcc/g++)

目錄 1. 軟件包管理器 1.1 什么是軟件包 1.2 Linux軟件生態 1.3 yum具體操作 1.3.1 查看軟件包 1.3.2 安裝軟件 1.3.3 卸載軟件 1.3.4 注意事項(測試網絡) 1.3.5 yum指令集總結 1.4 yum源目錄、安裝源 2. Vim編輯器的使用 2.1 Linux編輯器-vim使用 2.2 vim的基本概…

3DMAX自動材質開關插件AutoMaterial安裝和使用方法

3DMAX自動材質開關AutoMaterial,是一個3dMax腳本插件,它根據材質編輯器中當前活動的材質自動將材質應用于3dMax中新創建的對象,也適用于您復制的沒有材質的對象。它作為一個開關,可以綁定到按鈕或菜單來打開和關閉它。該工具的創建…

Linux內核調優實戰指南

內核調優通常通過修改內核運行時參數來實現,這些參數的配置文件是 Linux 系統中核心的性能調整點。 內核調優配置文件名稱 /etc/sysctl.conf: 這是最傳統和主要的內核參數配置文件。系統啟動時或手動執行 sysctl -p 命令時會讀取并應用其中的設置。/etc/sysctl.d/*.…

Java基礎常見知識點

Java 中 和 equals() 的區別詳解_java中與equals的區別及理解-CSDN博客https://blog.csdn.net/m0_64432106/article/details/142026852深入理解Java中方法的參數傳遞機制 - 悟小天 - 博客園https://www.cnblogs.com/sum-41/p/10799555.html浮點型精度是什么意思?為…

OD C卷 -【高效貨運】

文章目錄高效貨運高效貨運 貨車的額定載貨量為wt;貨物A單件重量為wa,單件運費利潤為pa;貨物B單件重量wb,單件運費利潤為pb;每次出車必須包含A、B貨物,且單件貨物都不可分割,總重量達到額定的載貨量wt;每次出車能夠獲取…

手動解壓并讀取geo 文件 series_matrix_table_begin series_matrix_table_end之間的數據

手動解壓并讀取geo 文件 series_matrix_table_begin series_matrix_table_end之間的數據 1. 手動解壓并讀取文件內容 file_path <- “K:/download/geo/raw_data/GEO/GSE32967_series_matrix.txt.gz” 使用latin1編碼讀取文件所有行 con <- gzfile(file_path, “r”) all_…