github專案的開發分支管理、標籤管理、分支策略
從零開發:
先有遠端庫,從遠端庫克隆 (只會將master克隆下來):git clone 遠端庫地址
一.分支管理:
作用:假設你準備開發一個新功能,但需要兩週才能完成,第一週寫了60%,如果提交,由於程式碼還沒寫完,不完整的程式碼庫會導致別人不能幹活,如果等程式碼全部寫完在一次提交,又會存在丟失每天進度的風險。有了分支,可以避免上述問題,建立一個屬於自己的分支,別人看不到,還繼續在原來的分支上正常工作,而我們在自己的分支上幹活,想提交就提交,直到開發完畢後,在一次性合併到原來的分支上,這樣,即安全又不影響別人工作。
特點:Git分支是與眾不同的,無論建立、切換、和刪除分支,Git在非常短的時間內就能完成,無論版本庫是1個檔案還是1萬個檔案。
master主分支:在版本回退中,每次提交,Git都把它們串成一條時間線,在git裡,這個分支叫主分支,即master分支,HEAD嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前分支。每次提交,master分支都會向前移動一步,這樣,隨著不斷提交,master分支的線也越來越長。
常見的管理操作:
建立與合併分支(要切換到倉庫目錄下):git branch 分支名
切換分支:git checkout 分支名
建立與切換同時進行:git checkout -b 分支名
檢視當前分支:git branch (會列出所有分支,當前分支的面會有一個*號)
在分支上修改的內容合併到master分支,首先切換到master分支 :git merge 分支名
刪除分支:git branch -d 分支名
刪除遠端分支:git push origin :分支名
git push origin --delete 分支名
檢視分支合併圖:git log --graph
(注意):如果想要遠端庫的其他分支,則需要將首先在本地建立一個同名分支然後把它拉取下來:git pull origin 分支名
第一次推送遠端庫的同名分支時,會有如下提示:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
warning: push.default 尚未設定,它的預設值在 Git 2.0 已從 'matching'變更為 'simple'。若要不再顯示本資訊並保持傳統習慣,進行如下設定:
git config --global push.default matching
若要不再顯示本資訊並從現在開始採用新的使用習慣,設定:
git config --global push.default simple
當 push.default 設定為 'matching' 後,git 將推送和遠端同名的所有
本地分支。
從 Git 2.0 開始,Git 預設採用更為保守的 'simple' 模式,只推送當前
分支到遠端關聯的同名分支,即 'git push' 推送當前分支。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1.simple配置時要設定推送當前分支到遠端關聯的同名分支:git push --set-upstream origin lihong
以後推送直接用git push origin
2.matching配置時將分支推送到遠端(在分支中):git push origin
二、分支策略:
master分支應該是非常穩定的,依舊是僅用來發布最新版本,平時不能再上面幹活。幹活都在dev分支上,也就是說dev分支是不穩定的,到某個時候,比如1.0版本時,再把dev分支合併到master上,在master分支釋出1.0版本。你和你的小夥伴們每個人都在dev分支上幹活,每個人都有自己的分支,時不時往dev分支上合併就行了。
多人協作:
推送分支:git push origin master
git push origin dev
抓取分支:從遠端庫clone時,預設只能看到master
想在dev分支上開發,就必須建立origin的dev分支到本地
git checkout -b dev origin/dev
工作模式:
1.可以試圖使用git push origin branch-name 推送自己的修改
2.如果推送失敗,則因為遠端分支比你的本地更新需要先用git pull試圖合併
3.如果合併有衝突,則解決衝突,並在本地提交
4.如果有衝突或者解決衝突後,再用git push origin branch-name推送就能成功。
5.如果git pull提示“no tracking infromation”,則說明本地分支和遠端分支的連結沒有建立,用命令git branch --set--upstream branch-name origin/branch-name
三、標籤管理:
意義:在釋出一個版本時,我們通常先在版本庫中打一個標籤(tag),這樣,就唯一確定了打標籤時刻的版,將來無論什麼時候,取某個標籤的版本,就是把那個打標籤的時刻的歷史版本取出來,所以,標籤也是版本的一個快照。
打標籤:git tag 標籤名
檢視所有標籤:git tag
指定commit id打標籤:git tag 標籤名 commitID
指定標籤資訊:git tag -a 標籤名 -m "標籤資訊"
切換到指定標籤: git checkout 標籤名
檢視說明文字:git show 標籤名
刪除標籤: git tag -d 標籤名
推送標籤到遠端:git push origin 標籤名
一次性推送全部尚未推送到遠端的本地標籤: git push origin --tags
刪除已經推送到遠端的標籤:
先本地刪除:git tag -d 標籤名
再從遠端刪除:git push origin crefs/tags/標籤名
為上一個部落格補充一點:
建立忽略目錄(一般會隱藏):touch .gitignore 如果要忽略上傳的檔案,將檔名寫在這個檔案中。這個被寫入的檔案不會提交到遠端。
將該資料夾下所有檔案新增到快取區中:git add .
將快取區中所有檔案提交到版本庫:git commit . -m "註釋資訊"