【技術工具】源碼管理 - GIT工具

【技術工具】源碼管理 - GIT工具

1 前言

之前參考語雀一位大佬的,但鏈接找不到了,僅供參考。

  • 1、檢查空白錯誤
//確認將提交的內容中有無空白信息
git diff --check   
  • 2、嘗試讓每一個提交成為一個邏輯的獨立變更集
    • 盡量使每筆提交都成為獨立的patch,這讓你的同事審查你的改動時盡量讓事情容易。
  • 3、重寫提交歷史
    • 正式提交之前,可以通過修改本地提交歷史讓提交后的信息更加易懂。
  • 4、規范化提交信息

2 提交模板

1、git config

~$ git config --global -e
....
#添加
[commit]template = /home/mi/.gitmessage

2、配置模板

~$ vim ~/.gitmessage#title [where/what]#JIRA-ID #brief description for this bug [what/why]#Change-Id:auto-generate

3、提交使用模板

~$ git commit -s  #盡量不用 git commit -m "xx"

4、查看提交記錄

~$ git log --no-merges

3 生成patch

# 生成patch
git diff ./ > xxx.patch  #將差異的內容制作成patch
mkdir update && git diff commit-id-time1 commit-id-time2 --name-only | xargs -i cp '{}' ./update/ --parents #制作patch 把兩個commit-id 之間修改的文件復制到update目錄中 而且會把中間的目錄也一并生成# 打patch
patch -p1 < xxx.patch

4 子模塊管理

  • 子模塊允許你將一個Git倉庫當作另一個GIt倉庫的子目錄,這允許你克隆另一個倉庫到你的項目中并保持你的提交相對獨立配置文件再.gitmodules
  • 1)命令速查
git submodule --help # 查看說明## 克隆代碼時帶上子模塊
git clone --recurse-submodules <repository>## 初始化本地.gitmodules文件
git submodule init## 添加子模塊
git submodule add <repository> [<path>]## 拉取所有子模塊
git submodule foreach git pull## 更新子模塊
git submodule update --init --recursive --remote [<path>]
git submodule foreach git submodule update## 將子模塊切到指定分支
git submodule set-branch -b master [<path>]

5 貯藏和清理

  • 貯藏(stash)會處理工作目錄的臟狀態 - 即跟蹤文件的修改和暫存的改動。
  • 命令
$ git stash push 			# stash跟蹤文件的修改與暫存的改動
$ git stash push --keep-index 		# --keep-index 選項使存儲的同時保留索引。
$ git stash push --all				# -u 選項存儲untracked文件,
$ git stash push -u 				# stash全部文件(包括被忽略文件)$ git stash list 			# 列出當前的stash
$ git stash apply   		# 應用stash, 加上--index 選項可以讓之前暫存的文件重新暫存
$ git stash drop stash@{0}	# 移除stash,
$ git stash pop 			# 應用stash@{0},并移除它$ git stash branch dev  	# 創建新分支dev,然后應用stash,然后drop stash$ git clean -f -d 			# 移除工作目錄中所有未追蹤的文件以及空的子目錄(不包括被忽略文件)
$ git clean -n 				# 演戲以下,加-n參數
$ git clean -n -x 			# -x選擇清理忽略文件
$ git clean -x -i 			# -i交互模式

6 還原提交

git revert HEAD 		# 撤銷當前HEAD指向的patch上的更改git revert commit		# 撤銷制定commitid表示的patch上的更改# merge之后的revert
git revert -m 1 HEAD 	# HEAD指向的節點有兩個父節點,-m 1保留父節點1,撤銷父節點2帶來的改變

7 重置操作

在這里插入圖片描述

# 作用于某個patch
git reset --soft [patch]	#移動HEAD的指向,不改變Index和Work Directory
git reset --mixed [patch] #(默認reset)移動HEAD的指向,改變Index,但不改變Work Directory
git reset --hard [patch]	#移動HEAD的指向,改變Index和Work Directory# 作用于某個path/file
git reset [path/file]	#通過當前HEAD指向的patch改變當前Index(恢復暫存區)
git reset [patch] [path/file] #通過指定patch改變當前Index# 壓縮提交
git reset --soft [patch] #HEAD移動到壓縮提交的前一個patch,Index和Work Directory不變
git commit #通過Index創建新的patch

8 查看歷史

# 常規使用
git log --oneline --graph --all #簡略顯示各種分支的patch記錄,個人比較下常用這個命令
git log --stat    # 顯示每次提交的文件修改統計信息。
git log -p 	# 按補丁格式顯示每個提交引入的差異。# 定制化輸出
# - --date=format定制作者修訂日期格式
# - --pretty=format定制log記錄顯示
# - --graph圖形顯示分支與合并歷史
# - --all顯示所有分支
git log --pretty=format:"%h %s" --graph
git log --date=format:'%Y-%m-%d %H:%M:%S' --pretty=format:"%h-%an-%ad-%ae" --graph --all# 過濾出自己想要看到的log
git log -3  			#按次數,最近3次提交log
git log --since=2.weeks 	#按時間,最近兩周提交log
git log --until=2020-03-20 	#按時間,2020-03-20前的提交log
git log --grep="update"	#僅顯示提交說明中包含"update"的提交# 如果要在 Git 源碼庫中查看 Junio Hamano 在 200810 月其間, 除了合并提交之外的哪一個提交修改了測試文件,可以使用下面的命令:
git log --pretty="%h - %s" --author='Junio C Hamano' --since="2008-10-01" \--before="2008-11-01" --no-merges -- t/
5610e3b - Fix testcase failure when extended attributes are in use
acd3b9e - Enhance hold_lock_file_for_{update,append}() API
f563754 - demonstrate breakage of detached checkout with symbolic link HEAD
d1a43f2 - reset --hard/read-tree --reset -u: remove unmerged new paths
51a94af - Fix "checkout --track -b newbranch" on detached HEAD
b0ad11e - pull: allow "git pull origin $something:$current_branch" into an unborn branch

9 遠程同步

  • 從遠程獲取最新的patch或分支,引用的信息記錄到.git/FETCH_HEAD
### 從gerrit上取一個patch,然后pick到當前分支
git fetch ssh://wangjianfeng1@git.mioffice.cn:29418/device/xiaomi/merlin refs/changes/17/909617/1
git cherry-pick FETCH_HEAD### 獲取遠程庫的分支更新,然后merge到本地分支
git fetch origin master:tmp #從遠程倉庫master分支獲取最新,在本地建立tmp分支
git diff tmp #將當前分支和tmp進行對比
git merge tmp #合并tmp分支到當前分支

10 文件標注

mi@ubuntu:base$ git blame Android.bp -L 230,231  #查看Android.bp的230-231行提交記錄,
#commit id   #提交者        #時間                      #行          #內容
7c469179ce2a (junyulai      2019-01-16 20:23:34 +0800 230)         "core/java/android/net/ISocketKeepaliveCallback.aidl",
e40eab608af2 (Benedict Wong 2018-11-14 17:50:13 -0800 231)         "core/java/android/net/ITestNetworkManager.aidl",

11 二分法查找

# 開始
$ git bisect start  # 啟動二分
$ git bisect bad 	# 當前提交有bug
$ git bisect good <good_commit>  #指定已知的最后一次正常狀態是哪次提交# 測試 --> 二分判斷
$ git bisect good  # 當前提交無bug
$ git bisect bad   # 當前提交有bug# 結束
$ git bisect reset

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

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

相關文章

Objective-c Block 面試題

以下是對我們這整段關于 Objective-C 中 Block、__block 修飾符、內存管理行為、生命周期等內容的全面總結&#xff0c;并附帶了一套適合面試準備的面試題集&#xff08;帶答案&#xff09;。 &#x1f9e0; 一、知識總結&#xff1a;Objective-C Block __block 修飾符 ? Bl…

AndroidMJ-基礎-05

基礎part5: 9:測試相關 postman genemotion espresso 10:性能相關 profiler 9.測試相關 espresso相關&#xff1a; Android Espresso 自動化測試指南&#xff08;Java 版&#xff09;-CSDN博客 10.性能相關 profiler相關&#xff1a; AndroidStudio之內層泄漏工具Profiler…

R語言 | 如何使用R書寫html文檔?

更靈活的書寫方式&#xff0c;可以直接看3. 1. 可用函數 cat()函數writeLines()函數sink()函數重定向輸出到HTML文件 小結&#xff1a;cat()適合簡單HTML&#xff0c;writeLines()適合多行內容&#xff0c;sink()適合復雜場景。 說明&#xff1a;盡可能不用R包&#xff0c;減…

oracle 表空間超過最大限度,清理數據釋放內存

目錄 一、擴容&#xff1a;參考 https://blog.csdn.net/weixin_40841731/article/details/134931289 二、清理數據 1、查詢文件大小情況&#xff08;管理員賬號&#xff09; 2、查詢表的大小&#xff08;使用該表空間的用戶&#xff09; 3、清理數據&#xff08;使用該表空…

初版BL程序一些細節整理(碎碎念)

一.串口的中斷觸發 一般我們都是使用TXE或者RXNE來觸發中斷&#xff0c;其實還有完整傳輸結束的TC標志位和接收完成的IDLE標志位 這兩個標志位有些不同&#xff0c;RXNE標志位只需要讀取寄存器就會自行清除&#xff0c;但是這兩個需要讀取兩個&#xff0c;拿IDLE舉例子 這里需要…

為何京東與螞蟻集團競相申請穩定幣牌照?

京東與螞蟻集團競相申請穩定幣牌照&#xff0c;主要是為了搶占數字金融新賽道&#xff0c;結合香港的寬松監管政策與全球穩定幣市場的快速增長。香港2023年推出的穩定幣監管框架及2025年8月即將實施的《穩定幣條例》&#xff0c;為企業提供了合規路徑&#xff0c;吸引京東通過幣…

[特殊字符] Harmony OS Next里的Web組件:網頁加載的全流程掌控手冊

&#x1f389; Harmony OS Next里的Web組件&#xff1a;網頁加載的全流程掌控手冊 ##Harmony OS Next ##Ark Ts ##教育 本文適用于教育科普行業進行學習&#xff0c;有錯誤之處請指出我會修改。 開發者必看的生命周期回調詳解代碼實操指南 作為開發者&#xff0c;你可能經常需…

【Java學習筆記】集合介紹

集合 > > 集合的引出 在之前常使用數組存儲數據&#xff0c;存在的問題如下&#xff1a; &#xff08;1&#xff09;初始化時&#xff0c;長度必須指定&#xff0c;而且一旦指定&#xff0c;不能更改 &#xff08;2&#xff09;不方便擴容&#xff08;使用循環復制原…

電流傳感器在汽車中的應用:從BMS電池管理到電機控制的工程解析

1 電流傳感器&#xff1a;汽車電子系統的神經末梢 在現代汽車電子架構中&#xff0c;電流傳感器已從簡單的測量元件演變為??關鍵的安全與性能組件??。作為動力系統的“神經末梢”&#xff0c;它們持續采集電流參數并反饋至控制單元&#xff0c;構成??實時閉環控制的基礎…

積分商城拼團系統框架設計

一、邏輯分析 用戶相關邏輯 用戶注冊與登錄&#xff1a;用戶需要注冊賬號才能參與積分商城拼團活動。注冊過程中需收集必要信息&#xff0c;如用戶名、密碼、聯系方式等。登錄功能則用于驗證用戶身份&#xff0c;方便用戶后續操作。用戶積分管理&#xff1a;用戶通過各種途徑&a…

java 數據結構-HashMap

一、hashmap特點 1、HashMap 是一個散列表,它存儲的內容是鍵值對(key-value)映射。 2、HashMap 實現了 Map 接口,根據鍵的 HashCode 值存儲數據,具有很快的訪問速度,最多允許一條記錄的鍵為 null,不支持線程同步。 3、HashMap 是無序的,即不會記錄插入的順序。 4、HashMa…

DBSyncer:一款開源的數據同步工具

DBSyncer&#xff08;簡稱 dbs&#xff09;是一款開源的實時數據同步中間件&#xff0c;提供 MySQL、Oracle、SQL Server、PostgreSQL、SQLite、Elasticsearch、Kafka、File、SQL 數據庫等同步場景&#xff1b;支持上傳插件自定義同步轉換業務&#xff1b;提供監控全量和增量數…

大型語言模型的中毒攻擊的系統評價

大家讀完覺得有幫助記得及時關注和點贊&#xff01;&#xff01;&#xff01; 抽象 隨著預訓練大型語言模型 &#xff08;LLM&#xff09; 及其訓練數據集的廣泛使用&#xff0c;人們對與其使用相關的安全風險的擔憂顯著增加。 這些安全風險之一是 LLM 中毒攻擊的威脅&#xff…

Windows 10更新失敗解決方法

前言 在我們使用 Windows 時的時候&#xff0c;很多時候遇到系統更新 重啟之后卻一直提示“我們無法完成更新&#xff0c;正在撤銷更改” 這種情況非常煩人&#xff0c;但其實可以通過修改文件的方法解決&#xff0c;并且正常更新到最新版操作系統 01修改注冊表 管理員身份…

Redis高級|Redis單線程VS多線程(基礎)

文章目錄 面試題Redis為什么選擇單線程為什么逐漸加入多線程特性Redis6、Redis7的多線程特性和IO多路復用入門Redis7多線程 面試題 Redis到底是單線程還是多線程&#xff1f;IO多路復用聽說過嗎&#xff1f;Redis為什么這么快&#xff1f; Redis為什么選擇單線程 其實Redis單…

ONLYOFFICE 的AI技巧-1.集成OCR、文本轉圖像、電子表格集成等新功能

隨著人工智能不斷革新數字辦公空間&#xff0c;我們通過全新的 ONLYOFFICE AI 插件再次實現突破。無論您是長期用戶還是新手&#xff0c;這些更新都將讓您的文檔處理更加智能、直觀且高效。讓我們一起來了解這些最新增強功能——部分功能已在 ONLYOFFICE 文檔 8.3.3 版本中上線…

Snipaste:一款簡單強大的跨平臺截圖工具

給大家介紹一款我在日常寫作中使用的截圖工具&#xff1a;Snipaste 。它是一個支持截圖&#xff08;Snip&#xff09;和貼圖&#xff08;Paste&#xff09;功能的免費軟件&#xff0c;支持 Windows、macOS、Linux 跨平臺。 智能截圖 Snipaste 提供了強大的截圖功能&#xff0c…

python學習打卡day52

DAY 52 神經網絡調參指南 知識點回顧&#xff1a; 隨機種子內參的初始化神經網絡調參指南 參數的分類調參的順序各部分參數的調整心得 作業&#xff1a;對于day41的簡單cnn&#xff0c;看看是否可以借助調參指南進一步提高精度。 day41的簡單CNN最后的結果&#xff0c;今天要做…

自定義線程池 4.0

自定義線程池 4.0 1. 簡介 上次我們實現了自定義線程池的 3.1 版本&#xff0c;提供了線程工廠創建線程和工具類創建簡單線程池的功能&#xff0c;增強了線程池的靈活性&#xff0c;并且用起來更加方便了&#xff0c;本文我們將做如下的優化&#xff1a; 給線程池添加關閉的…

list is not in GROUPBY clause and contains nonaggregated column ‘*.*‘

SELECT list is not in GROUP BY clause and contains nonaggregated column mydb.t.address which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_modeonly_full_group_by 關于查詢列不在分組字段內觸發錯誤 之前我一直使用其…