遠程協作角色:服務器,開發者A,開發者B
分支策略:
如圖,服務器上運行的是master分支,是用來運行穩定版本的,在服務器的master下創建一個新的分支dev:
$git checkout -b dev
Switched to a new branch 'dev'
$git push
fatal: The current branch dev has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin dev
我們會發現,遠程分支現在只有master分支,並沒有dev分支,所以根據提示我們執行:
$git push --set-upstream origin dev
To http://xx.xx.xx/xxx.git
* [new branch] dev -> dev
Branch dev set up to track remote branch dev from origin.
至此,dev分支創建並提交完畢
dev分支是用來給A和B做開發測試用的,測試沒有問題後,再和master分支合併,這樣服務器上就可以運行新穩定版本了
然後,開發者A拉取服務器上的dev分支,這裏有兩種方法:
(1)、先在開發者A上創建dev分支,然後拉取發現問題:
$git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> dev
原因是沒有指定本地dev
分支與遠程origin/dev
分支的鏈接,根據提示,設置dev
和origin/dev
的鏈接:
$git branch --set-upstream-to=origin/dev dev
問題解決;
(2)在本地沒有dev分支的情況下,直接拉取遠程的dev分支:
git checkout -b dev origin/dev
問題解決;
接着,開發者A要在自己的機器上創建devA
$git checkout -b devA
接着,在devA分支上寫了代碼後,開發完成,要提交了:
$git add *
$git commit -am "branch test"
$git push --set-upstream origin devA
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 288 bytes | 288.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To http://xx.xx.xx.xx/xxx.git
* [new branch] devA -> devA
Branch 'devA' set up to track remote branch 'devA' from 'origin'.
這樣,就把代碼提交到遠程的devA分支了
開發者B在自己的機器下也和開發者A同樣的操作
然後,開發完了,要開始測試了,就要將devA和devB分支合併到服務器上的dev分支,接下來是在服務器上的操作:
$git checkout -b devA
$git branch --set-upstream-to=origin/devA devA
$git pull
$git checkout dev
$git merge devA
這樣,就把devA的分支合併到dev了,可以在dev分支上運行代碼測試了,只是有可能發生代碼衝突,這樣就只能解決了衝突再合併,解決衝突教程:https://www.liaoxuefeng.com/wiki/896043488029600/900004111093344
同樣的道理,當dev分支測試完了,穩定之後,就將dev合併到master分支上