企業開發工具git的使用:從入門到高效團隊協作

????????前言:本文介紹了Git的安裝、本地倉庫的創建與配置,以及工作區、暫存區和版本庫的區分。詳細講解了版本回退、撤銷修改等操作,并深入探討了分支管理,包括分支的創建、切換、合并、刪除及沖突解決。此外,還介紹了遠程操作,如遠程倉庫的創建與克隆,分布式版本控制的理解。最后,文章總結了系統開發環境和Git分支設計規范,強調了不同分支在開發、測試、預發布和生產環境中的作用。通過本文,您可以全面掌握Git的核心功能及其在團隊協作中的應用。

目錄

認識git

git安裝

創建本地倉庫

配置本地倉庫

工作區、暫存區、版本庫

版本回退

撤銷修改

刪除文件

分支管理

分支管理的理解

分支的創建、切換、合并

刪除分支

合并沖突

bug分支

強制刪除分支

遠程操作

理解分布式版本控制

遠程倉庫創建

克隆遠程倉庫

?編輯

git標簽管理?

多人協作1(單分支)

多人協作2(多分支)

系統開發環境

Git分支設計規范


本地操作

git安裝

安裝:

linux Centos:

sudo yum install git -y

linux Ubuntu:

sudo apt-get install git -y

?查看版本:

git --version

創建本地倉庫

git并不是對任意位置的文件都能維護,我們需要創建本地倉庫,如下:

創建目錄gitcode:

mkdir gitcode

初始化

git init

? ? ? ? git init:初始化一個新的 Git 倉庫。它的作用是將當前目錄轉換為一個 Git 倉庫(或創建一個空的 Git 倉庫),從而允許 Git 開始跟蹤該目錄下的文件變更。

初始化完成后,可以發現目錄下多了一個隱藏目錄.git

注意:不要手動修改.git目錄里的內容。

配置本地倉庫

創建完倉庫后注意name 和 email必須配置,要不然后續會出現各種問題。如下:

git config user.name 用戶名
git config user.name 電子郵件

查看配置結果:?

git config -l

刪除配置:

git config --unser user.name?
git config --unser user.email?

讓配置文件在所有倉庫中都生效(加--global選項即可),如下:

git config --global user.name 用戶名
git config --global user.email 電子郵件

刪除配置(加--global選項)

git config --global --unser user.name?
git config --global --unser user.email?

工作區、暫存區、版本庫

????????如上我們在新建目錄gitcode,并用git init指令初始化得到.git目錄。其中gitcode目錄下稱為工作區,而.git目錄下就是版本庫。

我們在對文件進行操作是在工作區的,但并未得到git的管理,還需要把它放到.git里。

注意:不能對.git目錄直接操作,會導致其內部結構錯亂。應使用相關指令進行操作。

  • ?作區:是在電腦上你要寫代碼或?件的?錄。
  • 暫存區:英?叫 stage 或 index。?般存放在?.git ?錄下的 index ?件(.git/index)中,我們把暫存區有時也叫作索引(index)。
  • 版本庫:?名倉庫,英?名 repository 。?作區有?個隱藏?錄?.git ,它不算?作區,?是 Git 的版本庫。這個版本庫??的所有?件都可以被 Git 管理起來,每個?件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。

.git里面還有一個對象庫,修改的工作區內容會寫入對象庫的一個新的git對象中。

使用指令:

  • git add 文件名

把工作區的文件存儲到暫存區,add后面可跟多個文件,后面跟 .(點)表示所有文件。

使用指令:

  • git commit -m "xxxx"

把暫存區數據推送到版本庫。其中xxxx表示你對此次修改的描述。

示例:

  • git log:查看提交記錄,按時間從近到遠。
  • git log --pretty=oneline:加選項--pretty=oneline,更簡潔美觀的顯示,如下:

其中黃色高亮的地方為<commit-id>是 Git 提交的哈希值,用來標識文件的唯一性。

使用指令:git cat-file -p <commit-id>,用于查看 Git 對象的原始內容,其中?-p?表示 "pretty-print"(格式化輸出)。

修改文件

Git追蹤管理的其實是修改,而不是整個文件。

修改文件readme,添加文本hello git

使用git status查看工作狀態,如下:

Git能追蹤到文件readme被修改,并顯示出“建議進行 git add和git commit”的字眼。

  • git diff 文件名:查看暫存區和工作區的文件差異,如下:

  • a:改動前
  • b:改動后
  • ---:改動前
  • +++:改動后

指令:

  • git diff HEAD -- 文件名:查看版本庫和工作區的文件差異。

接下來進行add和commit,同時過程狀態的變化:

版本回退

指令:git reset [--soft | --mixed | hard ] [HEAD]

  • soft:只回退版本庫內容。
  • mixed(默認選項):回退版本庫和暫存區內容。
  • hard(慎用):回退所有區域的內容。
  • HEAD:當前版,也可以填寫指定的<commit-id>。

? ? ? ? 現有兩個版本的readme內容,老版本hello?git,新版本hello?git和hello word,下面簡寫為git和world:

以--hard選項為例 測試:

那么如果我們回退后,后悔了想要回到剛才的狀態怎么辦?

再次通過git log查<commit-id>是查不到的,如下:

我們使用指令:git reflog即可查看,如下:

????????里面記錄你做過的各種操作,其中黃色高亮的為<commit-id>,“縮短版”的,但依舊能對得上。如下:

版本回退過程是非常快的,為什么回退那記錄?

????????git版本庫中主分支master指向當前版本的索引,即<commit id>,要進行版本回退,只需要改變master的指向即可。

撤銷修改

????????寫了一半寫不下去了,想重新開始寫該怎么辦?總不能一一刪除重新寫吧,我們更想要得到的是在最初開始寫的狀態。

? ? ? ? 而且我們寫的代碼可能已經推到暫存區,或版本庫了,要怎么把它撤銷?

解決方法:

場景一:?

  1. 手動刪(不推薦)
  2. git指令:git checkout --?文件名

場景二:

  1. 指令git reset HEAD(回退到版本庫當前版本)再用git checkout -- 文件名
  2. 直接用git reset --hard HEAD

場景三:

  1. 指令:git reset --hard HEAD^

對于版本選項:

  • commit id:指定版本
  • HEAD:當前版本
  • HEAD^:上一個版本
  • HEAD^^:上上個版本
  • ......

????????注意:一旦代碼推送到遠程倉庫就不能再撤銷了,撤銷的目的就是不影響遠程倉庫。遠程倉庫下文會講解。

????????撤銷修改:對提交過程的撤回。即工作區->暫存區->版本庫這個過程的撤回。主要是把撤銷回到工作區。

刪除文件

????????新增文件或刪除文件也是一種修改,要刪除暫存區或版本庫文件,只需要刪除工作區文件,然后進行add和commit即可。

可簡化為兩步:

  1. git rm 文件名:工作區,暫存區文件都被刪除。
  2. git commit -m “xxxx”:版本庫文件刪除。

分支管理

分支管理的理解

????????Git 的殺手锏之?:分?。分?就是科幻電影??的平?宇宙,當你正在電腦前努?學習 C++ 的時候,另?個你正在另?個平?宇宙?努?學習 JAVA。如果兩個平?宇宙互不?擾,那對現在的你也沒啥影響。不過,在某個時間點,兩個平?宇宙合并了,結果,你既學會了 C++ ?學會了 JAVA!

? ? ? ? 一個團隊要開發一個項目,每個讓可以延伸出一條分支,各自開發者負責自己的功能,最后進行測試再把它們進行合并在一起。

主分支master:是git最原始的分支,是整個git分支的跟。

分支的創建、切換、合并

  • git branch:查找分支。

????????其中我們會發現master前面有一個*,表示head指針指向master分支,也就是當前正在master分支下工作。

  • head指針:在開發過程中會有很多分支,head可以指向任意分支,head指向的分支為當前正在工作的分支。即*

使用cat查看HEAD內容,如下:

創建分支

  • git branch 分支名

示例:

查看.git結構,如下新增dev:

圖解:

注意:創建新分支(dev分支)的“根”是當前所在的分支。新分支的內容是基于最新提交的內容。

  • git checkout 分支名:切換分支

然后在dev分支下工作,最后合并到主分支。

合并分支:

  • git merge 分支名

注意:不能在dev分支下合并dev分支。只能在dev分支下合并master,或在master下合并dev。

刪除分支

合并后dev分支使命就結束了,最好把它刪除。

  • git branch -d 分支名:刪除分支,注意不能在dev分支上刪dev分支。

合并沖突

????????如果我們在基于a分支新增分支b,然后在b上修改,同時a分支也把數據修改,此時再把兩者合并時就會產生沖突。

????????如上圖,合并時會發生沖突,bbb和ccc只能保留一個,誰去誰留由程序員手動修改來決定。

測試:

  • 指令:git checkout -b dev1

創建并同時切換到分支dev1。

????????打開沖突文件file,可以發現git給我們添加<<<<<HEAD,=========,>>>>>>>dev這樣的字眼,用來把兩個文件新增內容區分開:

????????現在需要合并,可以在master分支上刪除ccc,然后進行add,commit,再進行合并。或者在dev1分支上刪除bbb,然后進行add,commit,再合并。?

注意:添加的這些提示字眼也要刪除。

merge沖突需要手動解決,然后重新提交合并。

  • git log --graph? --abbrev-commit:圖示顯示提交過程

合并模式

如果我們創建分支dev2并且不產生沖突,進行合并,如下:

????????Fast-forward代表“快進模式”,Fast-forword模式(即ff)不能通過圖示區分是merge提交還是正常提交,如下:

建議在合并時,不使用fast-forword模式,即添加--no-ff選項,并且添加描述信息,-m選項。

  • git merge --no-ff -m “xxxxx” 分支名?

分支策略

保證主分支的穩定性

多人開發

bug分支

????????master出bug怎么辦?master不是100%沒bug。為保險起見不要直接在master主分支上直接修改。

首先使用指令:git stash

? ? ? ? 這是一個非常有用的 Git 命令,它允許你臨時保存工作目錄和暫存區的修改,而無需提交這些更改。當你需要快速切換分支但又不想提交未完成的工作時,stash 就特別有用。

怎么理解stash呢?

????????首先要明白,一個文件無論在任何分支下進行修改,只要沒有進行add和commit,就不屬于任何分支,而是屬于工作區,并未涉及版本庫。那么內容還不夠完善我們并不想進行add或commit,又想讓它屬于某個分支要怎么辦?使用git stash把數據保留在當前分支。

????????好的,言歸正傳,假設我們已經基于master分支創建新的分支dev3,并且在dev3分支中進行了開發,但突然發現原來分支中master有bug,該怎么解決?

  1. 保存數據:首先使用git stash指令保存當前分支的數據。
  2. 修復bug:切回到master分支,在此之上創建新的分支,假設為 fix_bug,在fix_bug分支上把bug修復,然后合并回master。
  3. 回到dev3上繼續開發(git stash pop:恢復最近的stash),開發完成進行add和commit。
  4. 因為在dev3開發期間master已經修改(bug修復),所以dev3與master合并時會出現沖突。
  5. 沖突解決:為了保證master主分支的穩定性,把master合并到dev3中,在dev3中解決沖突(即刪除bug代碼)。
  6. 沖突解決后dev3進行add和commit,再次進行合并。

關于stash的簡單使用:

  • git stash:把當前工作區數據保存到stash中。
  • git stash list:查看stash中有那些內容。
  • git stash pop:恢復最近的stash。

在解決沖突時可能會誤操作,弄出bug!所以在dev3上合并。

測試后再合并到master。?

強制刪除分支

????????比如在寫某個功能時創建了一個分支,但寫到一半時(此時沒有進行合并)發現,這個功能根本沒必要寫,把分支刪除吧。

此時使用指令git branch -d無法刪除,該指令只適用于合并后對分支刪除,沒合并會失敗。

  • git branch -D:強行刪除。

遠程操作

理解分布式版本控制

????????我們?前所說的所有內容(?作區,暫存區,版本庫等等),都是在本地!也就是在你的筆記本或者計算機上。?我們的 Git 其實是分布式版本控制系統!什么意思呢?
????????可以簡單理解為,我們每個?的電腦上都是?個完整的版本庫,這樣你?作的時候,就不需要聯?了,因為版本庫就在你??的電腦上。既然每個?電腦上都有?個完整的版本庫,那多個?如何協作呢???說你在??電腦上改了?件A,你的同事也在他的電腦上改了?件A,這時,你們倆之間只需把各?的修改推送給對?,就可以互相看到對?的修改了。

但是這樣存在一個問題,要是自己電腦或對方電腦壞了怎么辦,數據不就找不回來了嘛。

????????在實際中使?分布式版本控制系統的時候,其實很少在兩?之間的電腦上推送版本庫的修改,因為可能你們倆不在?個局域?內,兩臺電腦互相訪問不了。也可能今天你的同事病了,他的電腦壓根沒有開機。因此,分布式版本控制系統通常也有?臺充當“中央服務器”的電腦,但這個服務器的作?僅僅是?來?便“交換”?家的修改,沒有它?家也?樣?活,只是交換修改不?便?已。有了這個“中央服務器”的電腦,這樣就不怕本地出現什么故障了(?如運?差,硬盤壞了,上?的所有東西全部丟失,包括git的所有內容)

中央服務器:24小時開機。

主要流行的有國外的GitHub和國內的gitee(碼云),下面我以gitee為例,講解如何使用。

遠程倉庫創建

  1. 首先注冊或登錄gitee
  2. 創建倉庫:

新建倉庫的界面:

????????創建倉庫并打開,我們可以發現它比本地倉庫多了三個文件,.gitfnore,README.en.md,README.md,如下:

.gitgnore文件:用來過濾不需要的文件,我們打開查看:

其中#表示注釋,*.swf表示過濾所有.swf后綴的文件。

????????我們可以手動對.gitgnore文件進行編輯,如果添加!a.swf表示a.swf文件不可被忽略。因為我們通常都不會把文件一個一個的推送到遠程,而是批量的推送,所以有些不重要的,無關的文件就會被推送上去,有了.gitgnore文件后起到了過濾的效果。

????????如果你的文件已經被?.gitignore?忽略,但仍然想強制添加到 Git 中,可以使用?git add -f(或?--force)命令。

  • git check-ignore -v 文件名:檢查一個文件是否已經被忽略

????????Readme:管理者(我們)來編輯Readme文件,填寫一些項目的介紹等,讓讀者快速了解項目的大體結構和功能,提供兩個模板:README.md為中文版,README.en.md為英文版。

????????issue模板:開發者(用戶)在使用你的服務或使用你的代碼過程中可能會發現一些bug,或者提出一些優化建議,Issue 模板?的主要作用是規范用戶提交 Issue 的格式和內容,幫助項目維護者更高效地收集、分類和處理問題或建議。

????????pull request模板:一個團隊成員(或貢獻者)在開發項目過程中,會基于你提供的主分支去創建一些子分支,進行功能開發,完成功能開發后會向你請求合并。Pull Request模板的作用是規范貢獻者提交代碼合并請求的格式和內容,幫助項目維護者高效審查代碼減少溝通成本,并提升協作質量。

Issues為例:?

倉庫成員管理:

成員角色權限
訪客(登錄用戶)對于公有倉庫:創建 Issue、評論、Clone 和 Pull 倉庫、打包下載代碼、Fork 倉庫、
Fork 倉庫提交 Pull Request、下載附件
報告者繼承訪客的權限。
私有倉庫:不能查看代碼、不能下載代碼、不能 Push 、不能 Fork 、
不能提交 Pull Request、可下載附件,不能上傳附件,不能刪除附件
觀察者繼承報告者權限
私有倉庫:創建 Wiki、可以 Clone 下載代碼、可以 Pull、不能 Fork
開發者創建 Issue、評論、Clone 和 Pull 倉庫、Fork 倉庫、打包下載代碼、創建 Pull Request、
創建分支、推送分支、刪除分支、創建 Issue 標簽(里程碑)、
創建 Wiki、可上傳附件,可刪除自己上傳的附件,不能刪除他人上傳的附件、
管理員創建 Issue、評論、Clone 和 Pull 倉庫、打包下載代碼、創建 Pull Request、
創建分支、推送分支、刪除分支、創建 Issue/Pull Request 標簽(里程碑)、創建 Wiki、
添加倉庫成員、強制推送分支、編輯倉庫屬性、可上傳附件,可刪除自己或他人上傳的附件、
不能轉移/清空/刪除倉庫

倉庫成員權限說明 - Gitee.com

克隆遠程倉庫

????????克隆遠程倉庫(Clone a Remote Repository)?是指將網絡上的 Git 倉庫(如 Gitee、GitHub、GitLab 等平臺上的項目)完整復制到本地計算機的操作。

https模式

這里介紹兩種方式:?

  • ssh:需要公鑰加密,然后克隆。
  • https:直接克隆即可

https模式:

打開xshell,創建或選擇一個目錄,執行以下指令:

git clone 遠端倉庫鏈接

注意:不能在本地git倉庫里執行這個命令。

fetch和push 表示擁有拉權限和推權限。

????????origin是一個默認的遠程倉庫別名(Remote Alias),它指向你克隆(git clone)的原始遠程倉庫地址。它是 Git 用來標識遠程倉庫的快捷方式,方便后續操作(如推送、拉取代碼等)。當你執行?git clone?時,Git 會自動將遠程倉庫地址命名為?origin

ssh模式

和https同樣的方法,進行克隆:

如下,我們是無法進行克隆的,因為沒有公鑰。?

需要把本地服務器公鑰放到git上進行管理。

打開gitee設置->打開ssh公鑰->設置公鑰

????????獲取公鑰:打開本地主目錄(如linux的root目錄下)->在文件.ssh下看有沒有id_rsa(私鑰)和id_rsa.pub(公鑰),如果沒有先使用指令生成公鑰,如下:

  • ssh-keygen -t rsa -C "電子郵件"

執行命令后一直回車即可。

注意:電子郵件要和gitee的保持一致。看郵箱:打開gitee設置->郵箱管理。

????????然后復制id_rsa.pub文件的內容,粘貼到gitee公鑰配置的位置,點擊確定生成公鑰。完成以上操作后再進行克隆。

多人協作時可配置多個公鑰。

ssh模式的好處:

  • SSH 使用密鑰對認證(公鑰+私鑰),只要本地私鑰配置正確且添加到遠程倉庫(如 GitHub、GitLab),克隆或推送時無需重復輸入賬號密碼。

  • HTTPS 克隆可能需要每次輸入密碼(除非配置憑據緩存或使用 Personal Access Token)。

  • SSH 通過非對稱加密通信,防止中間人攻擊(如果服務器指紋受信任)。

  • HTTPS 雖然也加密,但若使用密碼認證且未配置二次驗證,可能存在風險(例如密鑰泄露)。

遠程推送操作

把本地版本庫的文件推送到遠端:

  • git push origin <本地分支>?: <遠端分支>

把遠端的數據拉取到本地:

  • git pull origin <遠端分支> : <本地分支>

注1:要成功推送,必須保證本地的數據要新于遠端的數據,如果不夠新,則先使用git pull拉取。其次就算沒有最新代碼也pull一下,是一個好習慣。

注2:配置 user.name和user.email和遠端一樣。

注3:pull不僅拉取,還順便進行了合并。

推拉操作

配置命令別名

  • git config --global alias.別名?原名

--global選項:全局生效。

所有git命令都能配置別名。

例如:

git標簽管理?

  • 給最新提交版本打標簽:git tag 標簽名
  • 給指定版本打標簽:git tag 標簽名 <commit-id>
  • 看有那些標簽:git tag
  • 查看指定標簽的詳細信息:git show 標簽名
  • 給標簽加描述:git tag 標簽名?-m “xxxx” [<commit-id>]
  • 刪除標簽:git tag -d 標簽名

推送標簽

  • 推送指定標簽:git push origin 標簽名
  • 推送所有標簽:git push origin --tags

刪除標簽有兩種方法:1.本地刪除然后推送到遠端。2.遠端刪除。

以方法1為例,假設要刪除標簽v1.0,:

1.本地刪除:

  • git tag -d v1.0

2.刪除結果推送到遠端

  • git push origin : v1.0

多人協作1(單分支)

目標:master分支下file.txt文件新增代碼"aaa", "bbb"

實現:開發者1新增"aaa",開發者2新增"bbb"

條件在同一分鐘下協作完成。

一、遠端操作:新建一個分支,名為dev

二、本地操作:

開發者1:

  1. 克隆遠程倉庫。
  2. 創建本地分支dev。
  3. vim創建并打開文件file.txt,添加"aaa"。
  4. 進行add,commit和push,推送到遠程。

第2部,在創建本地分支dev時可以順便與遠程的dev分支做連接。使用指令:git checkout -b dev origin/dev

  • checkout:創建分支
  • -b:切換到創建的分支
  • dev:分支名
  • origin/dev:與遠程分支dev建立連接??

????????建立連接有什么用呢?建立連接后推送時直接使用git push即可,拉取時直接使用git pull,而不需要使用指令git push origin <本地分支>?: <遠端分支>

剛才是創建分支的同時建立連接,如果創建完分支后才想起來要建立連接怎么辦呢?

使用指令:git branch --set-upstream-to=origin/dev dev

git branch -a:查看所有分支情況,即本地分支和遠程分支。如下:

如果沒有顯示對應的遠程分支,使用git pull指令會把遠程分支同步到本地。

git branch -vv:查看本地分支與遠程分支的連接情況。如下:

開發者2:

  1. 克隆遠程倉庫。
  2. 創建本地分支dev。
  3. vim創建并打開文件file.txt,添"bbb"。
  4. 進行add,commit和push,推送到遠程。

對于第二部的細節與以上所講相同。

????????對于第四部,如果開發者1先推送了file.txt,開發者2再推送就會發生沖突,即與遠端的file.txt發生沖突。如何處理沖突?

????????把遠端的文件pull拉取下來,然后修改file.txt,讓本地的file.txt同時有aaa和bbb。然后重頭開始執行第四部。

三、最后把遠程dev合并到master,兩種方法:

方法1:

申請并填寫合并申請單:

對于管理者,進行代碼測試和審核,然后合并:

方法二:在本地合并后推送到遠程的master分支(不推薦)。

最后dev分支用完就可以刪了。

多人協作2(多分支)

目標:遠端master分支下新增function1和function2。

實現:開發者1新增function1,開發者2新增function2。

條件:在不同分支下協作完成。

該協作方式更為靈活,有各自的分支實現對應的功能。

一、遠程操作:在遠程創建dev1和dev2分支分別給開發者1和開發者2使用。

二、本地操作:

開發者1:

  1. 如果沒有克隆倉庫先克隆。
  2. 創建自己的本地dev1分支并與遠程dev1分支連接。
  3. 創建并編輯文件function1。
  4. 進行add,commit和push

開發者2:

  1. 如果沒有克隆倉庫先克隆。
  2. 創建自己的本地dev2分支并與遠程dev2分支連接。
  3. 創建并編輯文件function2。
  4. 進行add,commit和push

????????注意:無論是開發者1還是開發者2在push之前都建議執行指令git pull,保證本地倉儲數據和遠程倉庫同步。

三、遠程操作:申請合并單把dev1和dev2合并到master主分支。

如果合并過程有沖突,我們在的次分支下解決沖突,再合并到master分支,如下:

系統開發環境

  1. 開發環境:開發環境是程序猿們專??于?常開發的服務器。為了開發調試?便,?般打開全部錯誤報告和測試?具,是最基礎的環境。
  2. 測試環境:?個程序在測試環境?作不正常,那么肯定不能把它發布到?產機上。該環境是開發環境到?產環境的過渡環境。
  3. 預發布環境:該環境是為避免因測試環境和線上環境的差異等帶來的缺陷漏測?設?的?套環境。其配置等基本和?產環境?致,?的是能讓我們發正式環境時更有把握!所以預發布環境是你的產品質量最后?道防線,因為下?步你的項?就要上線了。要注意預發布環境服務器不在線上集成服務器范圍之內,為單獨的?些機器。
  4. ?產環境:是指正式提供對外服務的線上環境,例如我們?前在移動端或PC端能訪問到的APP都是?產環境。開發人員不能直接把代碼部署到用戶能訪問到的服務器,而是有自己的服務器。即環境隔離。

Git分支設計規范

Git分支有很多模型,其中Git Flow模型被廣泛使用,如下:

分?名稱適?環境
master主分??產環境
release預發布分?預發布/測試環境
develop開發分?開發環境
feature需求開發分?本地
hotfix緊急修復分?本地

注:以上表格中的分?和環境的搭配僅是常?的?種,可視情況?定不同的策略。

圖示:

  • master分?:master 為主分?,該分?為只讀且唯?分?。?于部署到正式發布環境,?般由合并release 分?得到。主分?作為穩定的唯?代碼庫,任何情況下不允許直接在 master 分?上修改代碼。?產品的功能全部實現后,最終在master分?對外發布,另外所有在master分?的推送應該打標簽(tag)做記錄,?便追溯。master分?不可刪除。
  • release分?:release 為預發布分?,基于本次上線所有的 feature 分?合并到 develop 分?之后,基于 develop 分?創建。可以部署到測試或預發布集群。命名以?release/ 開頭,建議的命名規則:?release/version_publishtime 。release 分?主要?于提交給測試?員進?功能測試。發布提測階段,會以 release 分?代碼為基準進?提測。如果在?release 分?測試出問題,需要回歸驗證?develop 分?看否存在此問題。release 分?屬于臨時分?,產品上線后可選刪除。
  • develop分?:develop 為開發分?,基于master分?創建的只讀且唯?分?,始終保持最新完成以及 bug 修復后的代碼。可部署到開發環境對應集群。可根據需求??程度確定是由?feature 分?合并,還是直接在上?開發(?常不建議)。
  • feature 分?:feature 分?通常為新功能或新特性開發分?,以 develop 分?為基礎創建 feature 分?。命名以 feature/ 開頭,建議的命名規則: feature/user_createtime_feature 。新特性或新功能開發完成后,開發?員需合到 develop 分?。?旦該需求發布上線,便將其刪除。
  • hotfix 分?:hotfix? 分?為線上 bug 修復分?或叫補丁分?,主要?于對線上的版本進? bug 修復。當線上出現緊急問題需要?上修復時,需要基于 master 分?創建?hotfix 分?。命名以?hotfix/ 開頭,建議的命名規則:?hotfix/user_createtime_hotfix 當問題修復完成后,需要合并到 master 分?和 develop 分?并推送遠程。?旦修復上線,便將其刪除。

非常感謝您能耐心讀完這篇文章。倘若您從中有所收獲,還望多多支持呀!74c0781738354c71be3d62e05688fecc.png

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

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

相關文章

Java反射機制詳解:原理、應用與實戰

一、反射機制概述 Java反射(Reflection)是Java語言的一個強大特性&#xff0c;它允許程序在運行時(Runtime)獲取類的信息并操作類或對象的屬性、方法等。反射機制打破了Java的封裝性&#xff0c;但也提供了極大的靈活性。 反射的核心思想&#xff1a;在運行時而非編譯時動態獲…

成功案例丨從草圖到鞍座:用先進的發泡成型仿真技術變革鞍座制造

案例簡介 在鞍座制造中&#xff0c;聚氨酯泡沫成型工藝是關鍵環節&#xff0c;傳統依賴實驗測試的方法耗時且成本高昂。為解決這一問題&#xff0c;意大利自行車鞍座制造商 Selle Royal與Altair合作&#xff0c;采用Altair Inspire PolyFoam軟件進行發泡成型仿真。 該工具幫助團…

隧道結構安全在線監測系統解決方案

一、方案背景 隧道是地下隱蔽工程&#xff0c;會受到潛在、無法預知的地質因素影響。隨著我國公路交通建設的發展&#xff0c;隧道占新建公路里程的比例越來越大。隧道屬于線狀工程&#xff0c;有的規模較大&#xff0c;可長達幾公里或數十公里&#xff0c;往往穿越許多不同環境…

選錯方向太致命,華為HCIE數通和云計算到底怎么選?

現在搞HCIE的兄弟越來越多了&#xff0c;但“數通和云計算&#xff0c;到底考哪個&#xff1f;”這問題&#xff0c;依舊讓不少人頭疼。 一個是華為認證的老牌王牌專業——HCIE數通&#xff0c;穩、系統、崗位多&#xff1b; 一個是新趨勢方向&#xff0c;貼合云原生、數字化…

相機基礎常識

相機基礎常識 相機中顏色濾鏡的作用&#x1f3a8; 1. **捕捉彩色圖像**? 最常見的顏色濾鏡陣列是 **拜耳濾鏡&#xff08;Bayer Filter&#xff09;**&#xff1a; &#x1f50d; 2. **實現特定的圖像效果或分析功能**? 常見的濾鏡類型包括&#xff1a; &#x1f6e0;? 3. *…

paddle ocr本地化部署進行文字識別

一、Paddle 簡介 1. 基本概念 Paddle&#xff08;全稱 PaddlePaddle&#xff0c;飛槳&#xff09;是百度開發的 開源深度學習平臺&#xff0c;也是中國首個自主研發、功能豐富、技術領先的工業級深度學習平臺。它覆蓋了深度學習從數據準備、模型訓練、模型部署到預測的全流程…

開源AI大模型等“神秘組合”,如何顛覆零售業數字化轉型?

基于開源AI大模型、AI智能名片與S2B2C商城小程序源碼的零售行業數字化轉型新路徑研究 摘要&#xff1a;在業界將企業數字化轉型劃分為管理數字化、工業數字化和營銷數字化三大部分的背景下&#xff0c;國內大型制造企業在ERP與工業4.0洗禮下正邁向智能型發展道路。而零售行業面…

uniapp+vite+cli模板引入tailwindcss

目前vitecli方式用的都是官方提供的模板&#xff0c;vite版本還是4.14版本&#xff0c;較舊&#xff0c;而tailwindcss已經有了4版本&#xff0c;實際發現引入最新版會報錯&#xff0c;因而繼續使用3.3.5版本 pnpm install tailwindcss3.3.5 uni-helper/vite-plugin-uni-tail…

Golang中的runtime.LockOSThread 和 runtime.UnlockOSThread

在runtime中有runtime.LockOSThread 和 runtime.UnlockOSThread 兩個函數&#xff0c;這兩個函數有什么作用呢&#xff1f;我們看一下標準庫中對它們的解釋。 runtime.LockOSThread // LockOSThread wires the calling goroutine to its current operating system thread. // T…

Ubuntu搭建NFS服務器的方法

0 工具 Ubuntu 18.041 Ubuntu搭建NFS服務器的方法 在Ubuntu下搭建NFS&#xff08;網絡文件系統&#xff09;服務器可以讓我們像訪問本地文件一樣訪問Ubuntu上的文件&#xff0c;例如可以把開發板的根文件系統放到NFS服務器目錄下方便調試。 1.1 安裝nfs-kernel-server&#…

HarmonyOS Next應用分層架構下組件封裝開發實踐

基于鴻蒙應用分層架構的ArkUI組件封裝實踐 在鴻蒙應用開發中&#xff0c;合理利用 ArkUI 組件進行封裝&#xff0c;可以實現代碼復用&#xff0c;提升開發效率。本文將結合鴻蒙應用分層架構的特點&#xff0c;詳細探討幾個典型的 ArkUI 組件封裝場景及其實現方案。 華為鴻蒙應…

JAVA請求vllm的api服務報錯Unsupported upgrade request、 Invalid HTTP request received.

環境&#xff1a; vllm 0.8.5 java 17 Qwen3-32B-FP8 問題描述&#xff1a; JAVA請求vllm的api服務報錯Unsupported upgrade request、 Invalid HTTP request received. WARNING: Unsupported upgrade request. INFO: - "POST /v1/chat/completions HTTP/1.1&…

舊 docker 版本通過 nvkind 搭建虛擬多節點 gpu 集群的坑

踩坑 參考nvkind教程安裝到Setup這一步&#xff0c;由于docker版本較舊&#xff0c;–cdi.enabled 和 config 參數執行不了 手動修改 /etc/docker/daemon.json 配置文件 "features": {"cdi": true}手動修改 /etc/nvidia-container-runtime/config.toml 配…

C++:與7無關的數

【描述】 一個正整數,如果它能被7整除,或者它的十進制表示法中某一位上的數字為7,則稱其為與7相關的數.現求所有小于等于n(n < 100)的與7無關的正整數的平方和. 【輸入】 輸入為一行,正整數n(n < 100) 【輸出】 輸出一行&#xff0c;包含一個整數&#xff0c;即小于等于n…

FPGA:Lattice的FPGA產品線以及器件選型建議

本文將詳細介紹Lattice Semiconductor的FPGA產品線&#xff0c;幫助你了解各系列的特點和適用場景&#xff0c;以便更好地進行選型。Lattice以低功耗、小尺寸和高性能為核心&#xff0c;產品覆蓋低中端市場&#xff0c;廣泛應用于通信、計算、工業、汽車、消費電子、嵌入式視覺…

汽車零部件沖壓車間MES一體機解決方案

在當前制造業升級的大背景下&#xff0c;提升生產效率、實現精細化管理已成為企業競爭力的關鍵。特別是在汽車零部件制造領域&#xff0c;沖壓車間作為生產流程中的重要一環&#xff0c;其生產數據的實時采集與分析對于確保產品質量、優化生產節拍、降低運營成本至關重要。今天…

32、跨平臺咒語—— React Native初探

一、時空晶體架構&#xff08;核心原理&#xff09; 1. 量子組件橋接協議 // 原生組件映射 <View> → iOS UIView / Android ViewGroup <Text> → UILabel / TextView 魔法特性&#xff1a; ? JavaScriptCore引擎&#xff1a;通過V8/Hermes引擎執行JS邏輯…

前端面試寶典---webpack面試題

webpack 的 tree shaking 的原理 Webpack 的 Tree Shaking 過程主要包含以下步驟&#xff1a; 模塊依賴分析&#xff1a;Webpack 首先構建一個完整的模塊依賴圖&#xff0c;確定每個模塊之間的依賴關系。導出值分析&#xff1a;通過分析模塊之間的 import 和 export&#xff…

VUE3_ref和useTemplateRef獲取組件實例,ref獲取dom對象

舊寫法 ref的字符串需要跟js中ref定義的變量名稱一樣 類型丟失&#xff0c;無法獲取到ref定義的title類型 <template><div><h1 ref"title">Hello Vue3.5</h1></div> </template><script setup>import { ref, onMounted } …

知識圖譜(KG)與大語言模型(LLM)

知識圖譜&#xff08;KG&#xff09;以其結構化的知識表示和推理能力&#xff0c;為大語言模型&#xff08;LLM&#xff09;的“幻覺”、知識更新滯后和可解釋性不足等問題提供了有力的解決方案。反過來&#xff0c;LLM的強大文本理解和生成能力也為KG的構建、補全、查詢和應用…