目錄
一、分支管理定義? ? ?
二、分支管理的預備知識
1. 分支管理的區(qū)域
?2. git文件的四種狀態(tài)
三、分支管理策略
1. 查看、新建分支
a. 查看分支
2. 操作分支?
a. 切換分支
b. 關(guān)聯(lián)分支
c. 刪除分支
四、push分支
? ? ? ? 1. 忽略文件? ? ? ??
????????2. push命令
一、分支管理定義? ? ?
????????幾乎每一種版本控制系統(tǒng)都以某種形式支持分支,一個分支代表一條獨立的開發(fā)線,使用分支意味著你可以從開發(fā)主線上分離開來,然后在不影響主線的同時繼續(xù)工作,Git 分支實際上是指向更改快照的指針。
????????其作用顯然是方便開發(fā):企業(yè)在開發(fā)項目中一般少不了四個分支:
master分支:用于版本的更新,當比較大的功能開發(fā)完成或者更新之后會有一次集體的發(fā)版,就會將所有的代碼都合到master(有的公司也會用release分支發(fā)版,原理都是一樣);
dev分支:一般是開發(fā)測試分支,在項目發(fā)版上線之前都會現(xiàn)在dev分支上統(tǒng)一進行測試,確保功能達標沒有bug之后再推到master分支;
feature分支:用來做分模塊功能開發(fā),建議命名為feature-xxx,模塊完成之后,會合并到 dev?分支;
hotfix分支:是用來做線上的緊急 bug 修復的分支,建議命名為 hotfix-xxx。當線上某個版本出現(xiàn)了問題,將檢出對應版本的代碼,創(chuàng)建 Hotfix 分支,問題修復后,合并回 dev和master ?,這里注意,合并到 master 的時候,一般要打上修復后的版本標簽。
二、分支管理的預備知識
1. 分支管理的區(qū)域
a. 本地分支:
-
Workspace:工作區(qū),就是vscode中日常開發(fā)存放項目代碼的地方
-
Index (Stage):暫存區(qū),用于臨時存放你的改動,事實上它只是一個文件,保存即將提交到文件列表信息
-
History:本地倉庫,就是安全存放數(shù)據(jù)的位置,這里面有你提交到所有版本的數(shù)據(jù),其中HEAD指向最新放入倉庫的版本。
b. 遠程分支
-
Remote Directory:遠程倉庫,托管代碼的服務(wù)器,即公司的 git倉庫 DevOps
????????一般開發(fā)過程中,我們會把本地與遠程的分支名設(shè)為同名。那怎么區(qū)分呢?遠程分支名前面有 remote origin 標志!各個區(qū)域的關(guān)系如下圖所示:
?2. git文件的四種狀態(tài)
? ? ? ? 在從遠端下載項目代碼時,要求是用命令行 clone代碼,而不是鼠標點擊下載一個壓縮文件,區(qū)別在于,clone下來的文件夾里有個.git目錄,關(guān)于文件版本等的所有信息都在這個目錄里面!它也是你能夠進行分枝管理版本控制的基礎(chǔ)。
????????版本控制就是對文件的版本控制,要對文件進行修改、提交等操作,首先要知道文件當前在什么狀態(tài),不然可能會提交了現(xiàn)在還不想提交的文件,或者要提交的文件沒提交上。
-
Untracked: 未跟蹤, 此文件在文件夾中, 但并沒有加入到git庫, 不參與版本控制. 通過git add 狀態(tài)變?yōu)镾taged.
-
Unmodify: 文件已經(jīng)入庫, 未修改, 即版本庫中的文件快照內(nèi)容與文件夾中完全一致. 這種類型的文件有兩種去處, 如果它被修改, 而變?yōu)镸odified. 如果使用git rm移出版本庫, 則成為Untracked文件
-
Modified: 文件已修改, 僅僅是修改, 并沒有進行其他的操作. 這個文件也有兩個去處, 通過git add可進入暫存staged狀態(tài), 使用git checkout 則丟棄修改過, 返回到unmodify狀態(tài), 這個git checkout即從庫中取出文件, 覆蓋當前修改 !
-
Staged: 暫存狀態(tài). 執(zhí)行g(shù)it commit則將修改同步到庫中, 這時庫中的文件和本地文件又變?yōu)橐恢? 文件為Unmodify狀態(tài). 執(zhí)行g(shù)it reset HEAD filename取消暫存, 文件狀態(tài)為Modified
三、分支管理策略
? ? ? ? 一般來說,項目開發(fā)的流程為:從代碼倉庫的master分支下clone下項目的工程代碼,然后基于當前master分支新建自己的feature分支進行開發(fā),這個要注意本地和遠程分支的關(guān)系(不清楚的可以看我上篇文章git入門)。開發(fā)完成之后就推到dev測試,通過測試之后就可以merge合到master,合到master分支的操作一般叫 “提mr” , 通過公司的DevOpps流水線操作。如果臨時需要新增什么小功能或者修復什么小bug可以 “ 提熱更”,也就是從master分支拉個hotfix分支,進行修改然后直接測試完合到master分支。
具體分支管理如下:
1. 查看、新建分支
a. 查看分支
git branch
1.1 git branch?
不帶參數(shù),查看本地已經(jīng)存在的分支,并且在當前分支的前面有 * 標記;?
1.2 后面加上 -a 參數(shù)可以查看所有分支列表,包括本地和遠程,遠程分支一般會用紅色字體標記出來
如果用git branch -a
沒有顯示全部的遠程分支,可以通過git fetch
將本地遠程跟蹤分支進行更新,與遠程分支保持一致。
1.3 后面加上?-vv?
參數(shù)可以顯示本地所有分支追蹤(關(guān)聯(lián))的遠程分支的情況,最后面是最近一次提交commit的注釋。
?
b. 新建分支?
????????git branch 后面加上新建的分支名 (branchname) 即可完成本地分支的建立(分支內(nèi)容與master一樣,因為在新建分支時的當前所處分支為master(*標識)?,也即你是基于master新建的test分支),并且此分支僅存在于本地。
2. 操作分支?
? ? ? ? 包括:切換、刪除、關(guān)聯(lián)遠程
a. 切換分支
????????2.1 倘若需要查看本地新建的 test 分支情況,需要切換到本地分支
git checkout (branchname)
????????2.2 新建切換可以合為一步:新建并切換到新分支,常用!??!
$ git checkout -b test2
?????????2.3 切換到遠程分支(常用!?。。?/p>
? ? ? ? 比如說我現(xiàn)在test1分支,想查看遠端test2的代碼(此時本地會新建并切換一個分支,當然你可以把這個本地的分支名設(shè)置成與遠端同名)下面我演示設(shè)置不同名的情況:
git checkout -b [local name] [origin name]
b. 關(guān)聯(lián)分支
? ? ? ? 2.4 本地新建的分支,需要關(guān)聯(lián)遠程的某個分支才能 push 成功,否則會出現(xiàn)一下報錯,關(guān)聯(lián)命令會自動提示,按提示關(guān)聯(lián)遠程分支后會在遠端新建一個同名的遠程分支:
當然你也可以先關(guān)聯(lián)再push:
git branch --set-upstream-to=origin/xxx分支名
git remote add origin 遠端倉庫地址
c. 刪除分支
?2.5 刪除遠程分支
git push origin --delete test2
?2.5?刪除本地分支,注意不能刪除當前所在分支,不然會報錯,只能刪除非當前分支
git branch -d test2
四、push分支
? ? ? ? 1. 忽略文件? ? ? ??
有些時候我們不想把某些文件納入版本控制中,比如依賴包node_modules(很大)、dist文件、臨時文件、日志文件yarn-debug.log*等,在主目錄下建立".gitignore"文件,此文件有如下規(guī)則:
-
忽略文件中的空行或以井號(#)開始的行將會被忽略;
-
可以使用通配符。例如:星號(*)代表任意多個字符,問號(?)代表一個字符,方括號([abc])代表可選字符范圍,大括號({string1,string2,...})代表可選的字符串等;
-
如果名稱的最前面有一個感嘆號(!),表示例外規(guī)則,將不被忽略;
-
如果名稱的最前面是一個路徑分隔符(/),表示要忽略的文件在此目錄下,而子目錄中的文件不忽略;
-
如果名稱的最后面是一個路徑分隔符(/),表示要忽略的是此目錄下該名稱的子目錄,而非文件(默認文件或目錄都忽略)。
#為注釋
*.txt #忽略所有 .txt結(jié)尾的文件,這樣的話上傳就不會被選中!
!lib.txt #但lib.txt除外
/temp #僅忽略項目根目錄下的TODO文件,不包括其它目錄temp
build/ #忽略build/目錄下的所有文件
doc/*.txt #會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
????????2. push命令
git push?命令用于從將本地的分支版本上傳到遠程并合并:
git push <遠程主機名> <本地分支名>:<遠程分支名>
如果本地分支名與遠程分支名相同,則上述命令可以省略‘ :<遠程分支名> ’,如將本地的 master 分支推送到 origin 主機的 master 分支:
git push origin master
如果本地版本與遠程版本有差異,但又要強制推送可以使用 --force 參數(shù),但一般不建議使用。多人協(xié)作時,若push失敗時應當自行處理完沖突再push,而不是用以下命令。文章來源:http://www.zghlxwxcb.cn/news/detail-783720.html
git push --force origin master
此外,前文中直接使用 git push 進行push,僅適用于本地和遠程分支已關(guān)聯(lián)并且同名的情況!文章來源地址http://www.zghlxwxcb.cn/news/detail-783720.html
到了這里,關(guān)于常用的git分支管理方法都在這了的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!