筆記:Git學習之應用場景和使用經驗

目標:整理Git工具的應用場景和使用經驗

一、開發環境

Git是代碼版本控制工具;Github是代碼托管平臺。

工具組合:VSCode + Git

需要安裝的軟件:vscode、Git

其中vscode需要安裝的插件:GitLens、Git History

二、應用場景

工作場景:嵌入式開發,本地使用

三、使用總結

基礎操作,參考廖雪峰的Git教程

Git教程 - 廖雪峰的官方網站

Git 基本工作流程

3.1 版本管理
3.1.1 更改提交

git commit

使用 git commit 將當前工作目錄的更改保存到本地代碼庫。

每次提交(commit)都會創建一個新的提交對象,

避免將無關或不相關的修改混合在一起提交。

3.1.2 版本回退

兩種方式:reset、revert

git?reset

通過改變HEAD和分支指針指向的方式,進行版本回退,

該操作之后的提交記錄不會被保留,并且不會創建新的提交;

git revert

通過創建一個新提交的方式來撤銷某次操作,該操作之前和之后的提交記錄都會被保留,

并且會將該撤銷操作作為最新的提交;

在個人開發上,建議使用reset;但在團隊開發中建議使用revert,

特別是公共的分支(比如master),這樣能夠完整保留提交歷史,方便回溯。

3.2 分支管理

一個分支代表一條獨立的開發線,使用分支可以從開發主線上分離開來,

不影響主線的同時繼續工作。

注:未被放入代碼庫的文件會在分支切換時被拋棄,造成嚴重后果。

3.2.1 分支切換

git switch

使用git switch <branch_name> 來切換到指定的分支。

3.2.2 分支合并

兩種方式:merge、rebase

相同點:都是從一個分支合并到當前分支。

注意:無論選擇哪種方式,都應該謹慎處理可能產生的沖突,

并確保在操作前備份代碼或創建臨時分支以防意外。

git merge

自動創建一個新的commit,如果遇到沖突,僅需要修改后重新commit。

方式:git merge會將目標分支的提交歷史合并到當前分支,形成一個新的合并提交。

這種方式被稱為"合并提交"或"三方合并",因為它保留了每個分支的獨立提交歷史。

結果:合并后的提交歷史會包含源分支和目標分支的所有共同提交以及合并提交。

場景:適用于合并公共分支、團隊開發時的代碼集成,或者希望保留分支獨立性的情況。

合并穩定的公共分支,如主分支或發布分支。多人協作開發時,將各自的特性分支合并到開發分支。

git?rebase

找公共的節點,直接合并之前commit歷史,得到簡潔的分支發展歷史,去掉了merge commit。

方式:git rebase會將當前分支的提交"移動"到目標分支的最新提交之后,

然后將目標分支的提交歷史應用到當前分支。這種方式被稱為"變基",因為它改變了提交的基點。

結果:合并后的提交歷史是線性的,沒有合并提交,看起來更加整潔。

但是原始分支的提交歷史會被修改,可能會導致沖突。

場景:適用于想要保持線性提交歷史、清晰的提交記錄,并希望將自己的提交"放到"目標分支上進行整合的情況。

最好不要在公共分支上使用rebase,如果前后基本上不會有別人改動你的分支,那么推薦rebase。

總結來說,在單人本地多分支開發中,使用變基操作來修復bug并更新所有分支是可行的,

可以確保所有分支都包含了最新的修復,并保持提交歷史的線性和清晰。

但是仍然建議在執行變基操作之前,仔細考慮其可能帶來的影響,并確保備份了代碼。

3.3 標簽管理

標簽也是版本庫的一個快照。

發布版本時,通常在版本庫中打個標簽(tag),則唯一確定打標簽時刻的版本。

切換到某個標簽,則相當于把打標簽時刻的歷史版本取出。

注意:標簽總是和某commit掛鉤。若該commit既出現在master分支,

又出現在dev分支,則在這兩個分支上都可看到此標簽。

3.3.1 標簽切換

使用git checkout <tagname>可將git倉庫的HEAD指針指向標簽所在的提交,

如:git checkout v1.0

3.4 開發管理

涉及到多人協作,如果沒有清晰的流程和規劃,每個人都提交一堆雜亂無章的 commit,

項目很快就會變得難以協調和維護。Git 版本管理同樣需要一個清晰的流程和規范。

3.4.1 Git flow

Git flow的優點是清晰可控,缺點是相對復雜,需要同時維護兩個長期分支。

該模式是基于"版本發布"的,目標是一段時間以后產出一個新版本。

長期分支:主分支master、開發分支develop。

前者用于存放對外發布的版本,任何時候在這個分支拿到的,都是穩定的分布版;

后者用于日常開發,存放最新的開發版。

短期分支:功能分支(feature branch)、補丁分支(hotfix branch)、發布分支(release branch)。

3.4.2 Github flow

Github flow 是Git flow的簡化版,專門配合"持續發布"。

3.4.3 Gitlab flow

Gitlab flow 是 Git flow 與 Github flow 的綜合。

它吸取兩者的優點,既有適應不同開發環境的彈性,又有單一主分支的簡單和便利。

四、經驗總結
4.1 文件未修改,但出現在工作區

修改文件權限可修復該異常。

項目修改:git config core.filemode false
全局修改:git config --global core.filemode false

如果在Linux和windows之間傳遞代碼,可能出現該異常。

修改換行符轉換設置,可修復該異常。

git config --global core.autocrlf false
git config --global core.filemode false
git config --global core.safecrlf true

4.2 如何使.gitignore中新增設置對之前的文件生效
$ git rm -r --cached .                #清除緩存 -r 表示遞歸刪除(如果有文件夾的話) . 表示所有文件
$ git add .                           #重新trace file
$ git commit -m "update .gitignore"   #提交和注釋$ git status --ignored                #查看狀態,包括忽略的文件
4.3 導出歷史提交記錄

git log --pretty=format:"%ai , %an: %s" >> ./commit.log

在項目根目錄下執行命令,導出 git 提交記錄到桌面git log --pretty=format:"%ai , %an: %s" --since="100 day ago" >> ./commit.log
如果想導出某些提交者的提交記錄,可以用grep過濾,比如我想導出zen這個人在項目中的提交記錄:git log --pretty=format:"%ai , %an: %s" --since="126 day ago" | grep "zen" >> ./commit.log
當然也可以導出成 Excel 文件git log --date=iso --pretty=format:'"%h","%an","%ad","%s"' >> ./commit.log%ai: 表示提交的時間,格式為 ISO 8601 標準的時間(例如 2024-04-16 14:30:00)。
%an: 表示提交者的名字。
%s: 表示提交時填寫的概要或簡短描述。
選項說明

-p

按補丁格式顯示每個提交引入的差異。

--stat

顯示每次提交的文件修改統計信息。

--shortstat

只顯示 --stat 中最后的行數修改添加移除統計。

--name-only

僅在提交信息后顯示已修改的文件清單。

--name-status

顯示新增、修改、刪除的文件清單。

--abbrev-commit

僅顯示 SHA-1 校驗和所有 40 個字符中的前幾個字符。

--relative-date

使用較短的相對時間而不是完整格式顯示日期(比如“2 weeks ago”)。

--graph

在日志旁以 ASCII 圖形顯示分支與合并歷史。

--pretty

使用其他格式顯示歷史提交信息。可用的選項包括 oneline、short、full、fuller 和 format(用來定義自己的格式)。

--oneline

--pretty=oneline --abbrev-commit?合用的簡寫。

選項說明

%H

提交的完整哈希值

%h

提交的簡寫哈希值

%T

樹的完整哈希值

%t

樹的簡寫哈希值

%P

父提交的完整哈希值

%p

父提交的簡寫哈希值

%an

作者名字

%ae

作者的電子郵件地址

%ad

作者修訂日期(可以用 --date=選項 來定制格式)

%ar

作者修訂日期,按多久以前的方式顯示

%cn

提交者的名字

%ce

提交者的電子郵件地址

%cd

提交日期

%cr

提交日期(距今多長時間)

%s

提交說明

%ai表示提交的時間,格式為 ISO 8601 標準的時間

資料整理自網絡

Git 歷史提交日志導出到文件中 | 張益銘的博客 (zhangyiming748.github.io)

Git - 查看提交歷史 (git-scm.com)

git日志導出命令 - xh_Blog - 博客園 (cnblogs.com)

Git 教程|極客教程 (geek-docs.com)

Git 歷史提交日志導出到文件中_eclipse導出git提交記錄-CSDN博客

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

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

相關文章

沒有析構函數的子類

在C中&#xff0c;如果一個類沒有定義析構函數&#xff0c;編譯器會為其生成一個默認的析構函數。這個默認析構函數會按照以下方式工作&#xff1a; 析構基類&#xff1a;如果類是從一個基類繼承而來的&#xff0c;默認析構函數會調用基類的析構函數。 析構成員&#xff1a;默…

倉庫貨物管理系統

摘 要 隨著信息技術的迅猛發展&#xff0c;大數據已經成為推動各行各業變革的重要力量。特別是在物流倉儲領域&#xff0c;大數據技術的應用不僅能夠顯著提升倉庫貨物管理的效率&#xff0c;還能夠優化庫存管理、減少成本、提高客戶滿意度。因此&#xff0c;基于大數據的倉庫貨…

webstorm 高效查看不同分支差異 摒棄你的git diff手動操作

背景 每次代碼沖突或者版本發生異常時&#xff0c;排查不同版本時就是一個頭大的問題&#xff0c;頭大的點在于用 vscode 的 git diff 一點點地排查和比較&#xff0c;耗時耗力&#xff0c;版面展不開&#xff0c;commit 差異看不出來&#xff0c;每個頁面的代碼不同也不能快速…

2007-2023年36家商業銀行綠色信貸、期末貸款總額、銀行總資產等相關指標數據(2023年無缺失)

2007-2023年36家商業銀行綠色信貸數據&#xff08;2023年無缺失&#xff09; 1.時間&#xff1a;2007-2023年&#xff0c;2023年無缺失 2.來源&#xff1a;銀行年報和社會責任報告 3.指標:綠色信貸余額、期末貸款總額、綠色信貸比率、總資產收益率、流動性比率、撥備覆蓋率、…

使用Linux的openssl生成https的ssl密鑰,然后自己簽名

新建一個文件夾 mkdir all_https_ssl cd all_https_ssl第一步&#xff1a; 生成一個密鑰&#xff0c;長度自定&#xff0c;比如2048&#xff08;防止有些應用要求密鑰長度不能太短&#xff09; openssl genrsa -out key.pem 2048第二步&#xff1a; 使用私鑰來生成證書請求…

最優化方法Python計算:標準型線性規劃的輔助問題

對標準型線性規劃 { minimize c ? x s.t. A x b x ≥ o ( 1 ) \begin{cases} \text{minimize}\quad\quad\boldsymbol{c}^\top\boldsymbol{x}\\ \text{s.t.\ \ \ \ }\quad\quad\quad\boldsymbol{Ax}\boldsymbol{b}\\ \quad\quad\quad\quad\quad\quad\boldsymbol{x}\geq\b…

軟件資產管理系統:提升企業透明度與合規性的終極解決方案!

在當今數字化時代&#xff0c;企業軟件資產的管理變得愈發復雜和重要。為了幫助企業更好地管理軟件資產、提升透明度和確保合規性&#xff0c;smartlic軟件資產管理系統應運而生。本文將深入探討smartlic系統的核心功能、實施案例及未來展望&#xff0c;為您揭示這一系統如何成…

Linux Ubuntu 20.04.06 安裝Onboard虛擬鍵盤教程

目錄 一、在線安裝 二、源碼安裝 三、包安裝 四、設置 五、禁用系統鍵盤 一、在線安裝 sudo apt-get update #更新軟件源 sudo apt-get install onboard #安裝Onboard sudo apt-get purge onboard # 卸載 安裝后&#xff0c;如果在終端使用命令&#xff1a;onboard 啟…

fio作圖

fio --filenametest_file --direct1 --rwrandwrite --numjobs1 --iodepth16 \ --ioenginelibaio --bs4k --group_reporting --namezhangyi --log_avg_msec500 \ --write_bw_logtest-fio --write_lat_logtest-fio --write_iops_logtest-fio --size1G 結果如下有&#xff1a; …

2002-2022年各省老年人口撫養比(人口抽樣調查)數據

2002-2022年各省老年人口撫養比(人口抽樣調查)數據 1、時間&#xff1a;2002-2022年 2、指標&#xff1a;老年人口撫養比 3、來源&#xff1a;國家統計局、統計年鑒 4、范圍&#xff1a;31省&#xff0c; 5、缺失情況&#xff1a;無缺失&#xff0c;其中2010年的值取2009、…

華為 eNSP 模擬器 配置RIP實例 動態路由協議

1 實驗拓撲 2 配置路由器 #R1 Huawei>sys [Huawei]sysname R1 [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.1.1 255.255.255.0 [R1-GigabitEthernet0/0/0]qu [R1]rip [R1-rip-1]network 192.168.1.0 [R1-rip-1]version 2 [R1-rip-…

ffmpeg在powershell和ubuntu終端下的不同格式

在win10下的powershell中&#xff0c;如果想運行一個exe文件&#xff0c;就不能再像cmd命令行一樣用名字來直接運行了&#xff0c;否則會提示格式不對。 正確的做法是&#xff1a; . \ffmpeg.exe -re -i video-test.mpr -rtsp_transport tcp -vcodec h264 -f rtsp rtsp://您的…

C語言中static關鍵字的作用與用法解析

C語言中static關鍵字的作用與用法解析 大家好&#xff0c;我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; C語言中static關鍵字的作用與用法解析 1. static關鍵字的基本概念 在…

C# 特性 Attribute 反射 Reflection 元數據 Metadata

在C#中&#xff0c;元數據&#xff08;Metadata&#xff09;是指與程序代碼本身相關的數據&#xff0c;這些數據提供了代碼的額外信息&#xff0c;但并不直接影響代碼的執行。元數據在.NET框架中扮演著重要的角色&#xff0c;以下是一些常見的元數據類型和它們的用途&#xff1…

MySQL 9.0 發布了!

從昨晚開始&#xff0c;在DBA群里大家就在討論MySQL 9.0發布的事情&#xff0c;但是Release Note和官方文檔都沒有更新&#xff0c;所以今天早上一上班就趕緊瞅了下具體更新了哪些內容&#xff1f; 整體看來&#xff0c;基本沒什么創新。下面是9.0新增或廢棄的一些特性。 &…

(linux系統服務)Linux高級命令用戶管理

一、Linux用戶管理 1、用戶概念以及基本作用 用戶&#xff1a;指的是Linux操作系統中用于管理系統或者服務的人 一問&#xff1a;管理系統到底在管理什么&#xff1f; 答&#xff1a;Linux下一切皆文件&#xff0c;所以用戶管理的是相應的文件 二問&#xff1a;如何管理文…

CF - 1676 - G White-Black Balanced Subtrees

White-Black Balanced Subtrees - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) #include <bits/stdc.h> using namespace std; int t; int n; vector<int> gv[4005]; string s; int tot; int dp(int x){int val;if(s[x]B){val1;}else if(s[x]W){val-1;}if(gv[x]…

啟智暢想集裝箱箱號識別產品簡介,軟硬件解決方案

產品介紹&#xff1a; 集裝箱車輛進出口通道&#xff0c;部署箱號識別相機&#xff0c;進行全天候監控。通過后端部署箱號識別系統&#xff0c;提供API接口&#xff0c;應用集裝箱識別模型&#xff0c;識別集裝箱箱號&#xff0c;記錄識別圖片。同時記錄識別時間、集裝箱特征圖…

“不喝雞湯 不訴離殤”華火電燃灶用實力引領烹飪灶具發展

在這個快節奏的時代&#xff0c;我們常常被各種廚房電器的雞湯所包圍&#xff0c;并悄悄的告訴我們廚房生活是美好與溫暖的&#xff0c;但面對現實中的挑戰與困難時&#xff0c;常常表現出選擇性失明&#xff1b;那些隱藏在傳統廚房烹飪環境下的危機&#xff0c;就像是慢性的毒…

Spring Boot logback 日志文件配置

引入依賴 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency>logback-spring.xml 配置 <?xml version"1.0" encoding"UTF-8&quo…