1. 程式人生 > 實用技巧 >Git 開發;流程

Git 開發;流程

1. 流程

  • develop 開發分支:開發人員每天都需要拉取/提交最新程式碼的分支
  • test 測試分支:開發人員開發完並自測通過後,釋出到測試環境的分支
  • release 預釋出分支:測試環境測試通過後,將測試分支的程式碼釋出到預發環境的分支(這個得看公司支不支援預發環境,沒有的話就可以不採用這條分支)
  • master 線上分支:預發環境測試通過後,運營/測試會將此分支程式碼釋出到線上環境
  • hotfix 分支:在 master 發現新的 bug 時,需要建立一個 hotfix,完成後,合併到 masterdevelop 分支

大致流程

  • 開發人員每天都需要拉取、提交最新的程式碼到 develop
    分支
  • 開發完畢後,開始 整合測試,測試無誤後提交到 test 分支,併發布到測試環境,交由測試人員測試
  • 測試環境通過後,釋出到 release 分支上,進行預釋出環境測試
  • 預發環境通過後,釋出到 master 分支上並打上標籤 tag
  • 如果線上分支出現 bug,這時開發者應該基於預釋出(沒有預釋出環境就用 master 分支),新建一個 bug 分支用來臨時解決 bug,處理完成後申請合併到預釋出分支(好處是不會影響正在開發中的功能)

1.1 克隆指定分支

場景:要求使用非master分支(如next分支)進行開發

git clone -b next “git地址”

1.2 優雅的在分支上開發

1、克隆到本地的分支為 next 分支,但是不能直接在上面開發,而是需要另外建立分支:

# 建立並切換到新的分支 next-dev,其中 add_login	為分支說明(可不加)
git checkout -b next-dev/add_login	

2、在 next-dev 分支上開發完後, 將程式碼提交到本地倉庫:

git add .	# ".“的意思就是儲存新增所有修改到暫存區
git commit -m “註釋” 	# 暫存區中的修改提交到本地倉庫,commit 規範可參考 6.1 commit 規範

3、將 next-dev 分支合併到 next 分支:

# 先切換到 next 分支
git checkout next	# 切換之前一定要先執行第二步

# 從遠端拉取最新的程式碼,當你合併分支的時候,可能其他同事又提交了新的內容,所以最好先拉取一次最新的程式碼
git pull origin next

# 合併(如果合併發現有衝突,可以使用視覺化工具檢視衝突的程式碼,如:pycharm、BCompare4
git merge next-dev

# 將原生代碼推送到遠端
git push origin next:next	# ”:“前面的是本地分支的名字,”:"後面的是遠端分支的名字

注意:合併之前先 commit,合併之前先 git pull

2. 常用命令

# ssh 方式需要配置 SSH Key,https 需要每次都輸入使用者名稱和密碼
$ cd /d/python-code/
$ git clone [email protected]:wangy8961/flask-vuejs-madblog.git
    
git init	# 初始化本地倉庫
git status	# 檢視狀態
git add .	# 新增到暫存庫
git commit -m 'xxx'	# 提交
git push -u origin master	# 推送到遠端

git remote add origin “HTTPS地址”		# 關聯遠端倉庫

# 從遠端拉取最新程式碼到本地
git pull		# 自動合併
git fetch		# 不合並

# 分支
git checkout -b feat/add-artical	# 建立新的分支 feat,並切到新分支,add-artical 為對這個分支的描述
git branch -d dev	# 刪除 dev 分支

3. 拉取最新程式碼

# 檢視已關聯的倉庫
$ git remote -v
origin  https://gitee.com/hubery_jun/flask-vuejs-madblog (fetch)
origin  https://gitee.com/hubery_jun/flask-vuejs-madblog (push)

# 類似於 git pull,也是用於拉取最新程式碼
$ git fetch
# 或拉取指定的遠端主機上的分支,如 origin 上的 master
$ git fetch origin master

git fetch 與 git pull 的區別

  • git fetch
    • 遠端跟蹤分支:可以更改遠端跟蹤分支
    • 拉取:會將資料拉取到本地倉庫,但是不會自動合併或修改當前的工作
    • commitID:本地庫中 mastercommitID 不變,還是等於 1
  • git pull
    • 遠端跟蹤分支:無法對遠端跟蹤分支操作,必須先切回到本地分支然後建立一個新的 commit 提交
    • 拉取:從遠處獲取最新版本,併合併到本地,會自動合併或修改當前的工作
    • commitID:本地庫中 mastercommitID 發生改變,變成了 2

用法

1、git pull

git pull <遠端主機名> <遠端分支名>:<本地分支名>
    
# 將遠端主機 origin 的 master 分支拉下來,與本地 dev 分支合併,若未指定本地分支(那麼將與本地當前分支合併)
git pull origin master:dev
    
# 用 git fetch 表示
git fetch origin master:dev
git merge dev

2、git fetch

# 方法一
git fetch origin master	# 從遠端 origin 倉庫的 master 分支拉取最新程式碼
git log -p master.. origin/master	# 比較本地的倉庫和遠端倉庫的區別
git merge origin/master	# 將遠端拉取的最新程式碼合併到本地倉庫,遠端和本地的合併

# 方法二
git fetch origin master:temp	# 從遠端 origin 倉庫的 master 分支拉取最新程式碼到本地並在本地建立一個新的分支 temp
git diff		# 比較 master 分支和 temp 分支的不同
git merge temp	# 合併 temp 分支到 master 分支
git branch -d temp	# 刪除 temp 分支

注意:git fetch 更安全也更符合實際要求,可以在合併前,先檢視更新情況,根據實際情況再決定是否合併

4. git push 常用用法

一般形式:

git push <遠端主機名> <本地分支名>  <遠端分支名>

# origin 為遠端主機名,將本地 next 分支推送到遠端 next 分支
git push origin next:next	

省略遠端分支:

# 表示將本地分支推送到與之存在追蹤關係的遠端分支(通常兩者同名),如果該遠端分支不存在,則會被新建
git push origin master

如果省略本地分支名,則表示刪除指定的遠端分支,因為這等同於推送一個空的本地分支到遠端分支,等同於 git push origin --delete master

git push origin :refs/for/master 

如果當前分支與遠端分支存在追蹤關係,則本地分支和遠端分支都可以省略,將當前分支推送到 origin 主機的對應分支 :

git push origin

如果當前分支只有一個遠端分支,那麼主機名都可以省略,形如 git push,可以使用 git branch -r ,檢視遠端的分支名:

git push

5. 分支管理

git checkout -b dev		# 建立並切換到分支
git branch -d dev		# 刪除分支
git branch			# 檢視當前分支

6. 程式碼提交

新增到儲存庫、合併分支

git add .		# 新增所有
git commit -m 'xxxx'	# 提交
git checkout master		# 切換到主分支
git merge dev		# 合併 dev 分支到 master 主分支
git branch -d dev	# 刪除 dev 分支
git branch		# 檢視當前分支

6.1 commit 規範

commit 的內容也應該遵守規範,一般來說是

  • 1. fix:xx :表示修改了XX程式碼
  • 2. feat:xx :新增了XX需求
  • 3. style:xx :修改了部分的樣式
  • 4. delete:xx: 刪除了某些無用的部分

推送到遠端

git push -u origin master	# 推送到遠端 master 

注意:合併分支必須先切換分支,刪除分支不是必須的!但是流程最好是:先建立分支 ---> 合併分支 ---> 提交 ---> 刪除分支 ----> 建立分支(第二天)

打標籤

git tag v0.1	# 打標籤 v0.1
git tag		# 檢視所有標籤
git show v0.1	# 檢視 v0.1 標籤(內容)

# 1. 同步單個標籤
$ git push origin v0.1

# 2. 同步所有標籤
$ git push --tags
# 或者:
$ git push origin --tags