分支管理~多人協作(十三)
當你從遠端倉庫克隆時,實際上Git自動把本地的 master 分支和遠端的 master 分支對應起來了,並且,遠端倉庫的預設名稱是origin。
要檢視遠端庫的資訊,用命令 git remote :如下
或者,用 git remote -v 顯示更詳細的資訊:如下
上面顯示了可以抓取fetch和推送push的 origin 的地址。如果沒有推送許可權,就看不到push的地址。
推送分支push
推送分支,就是把某個分支上的所有本地提交推送到遠端庫。推送時,要指定本地某個分支,這樣,Git就會把該分支推送到遠端庫對應的遠端分支上,如下:
如果要推送其他分支,比如dev,就改成:
$ git push origin dev
但是,並不是一定要把本地分支往遠端推送,那麼,哪些分支需要推送,哪些不需要呢?
master分支是主分支,因此要時刻與遠端同步;
dev分支是開發分支,團隊所有成員都需要在上面工作,所以也需要與遠端同步;
bug分支只用於在本地修復bug,就沒必要推到遠端了,除非老闆要看看你每週到底修復了幾個bug;
feature
總之,就是在Git中,分支完全可以在本地自己藏著玩,是否推送,視你的心情而定!
抓取分支fetch
多人協作時,大家都會往master和dev分支上推送各自的修改。
1、現在,模擬一個你的小夥伴,可以在另一臺電腦(注意要把SSH Key新增到GitHub)或者同一臺電腦的另一個目錄下克隆:
目前是克隆遠端倉庫 gitSkills ;
當你的小夥伴從遠端庫clone時,預設情況下,你的小夥伴只能看到本地的 master
E盤的工作目錄 gitSkills。
現在,你的小夥伴要在 dev 分支上開發,前提是GitHub要存在遠端分支dev,才可建立遠端 origin 的 dev 分支到本地,於是他用這個命令建立本地 dev 分支,如下:
建立本地dev分支和遠端倉庫的 dev 分支。
在E盤的工作目錄 gitSkills 下,建立並切換到分支dev,同時建立了本地分支dev與遠端分支dev兩者之間的關聯。
現在,他就可以在 dev 上繼續修改,然後,時不時地把 dev 分支 push 到遠端,如下:
2、你的小夥伴已經向 origin/dev 分支推送了他的提交,而碰巧你也在同樣的分支對同樣的檔案作了修改,並試圖推送:
克隆遠端倉庫把檔案放到桌面。
推送失敗,因為你的小夥伴的最新提交和你試圖推送的提交有衝突,解決辦法也很簡單,Git已經提示我們,先用 git pull 把最新的提交從origin/dev 抓下來,然後,在本地合併,解決衝突,再推送:
There is no tracking information for the current branch 表示:沒有當前分支的跟蹤資訊。
Please specify which branch you want to merge with 表示:請指定要與哪個分支合併。
git pull也失敗了,原因是沒有指定本地 dev 分支與遠端 origin/dev 分支的連結,根據提示,設定 dev 和 origin/dev 的連結,如下:
再接著使用 git pull ,如下:
這回 git pull 成功,但是合併檔案有衝突,需要手動解決,解決的方法和分支管理中的解決衝突完全一樣,如下:
檔案env.txt 命令視窗如下:VIM模式
衝突檔案、修改完內容後:
衝突檔案解決後,接著新增git add 、提交 git commit ,再 git push :
因此,多人協作的工作模式通常是這樣:
- 首先,可以試圖用 git push origin <branch-name> 推送自己的修改;
- 如果推送失敗,則因為遠端分支和你的本地分支存在衝突,需要先用 git pull 試圖合併;
- 如果合併有衝突,則手動解決衝突檔案,並在本地提交;
- 沒有衝突或者解決掉衝突後,再用 git push origin <branch-name> 推送就能成功!
如果 git pull 提示 no tracking information ,則說明本地分支和遠端分支的連結關係沒有關聯一起。
所以使用命令 git branch --set-upstream-to <branch-name> origin/<branch-name> 來關聯兩者之間的連結。
這就是多人協作的工作模式,一旦熟悉了,就非常簡單。
小結:
-
檢視遠端庫資訊,使用 git remote -v ;
-
本地新建的分支如果不推送到遠端,對其他人就是不可見的;
-
從本地推送分支,使用 git push origin <branch-name>,如果推送失敗,先用git pull抓取遠端的新提交;
-
在本地建立和遠端分支對應的分支,使用 git checkout -b <branch-name> origin/<branch-name> 本地和遠端分支的名稱要一致;
-
建立本地分支和遠端分支的關聯,使用 git branch --set-upstream <branch-name> origin/<branch-name> ;
-
從遠端抓取分支,使用 git pull ,如果有衝突,要先處理衝突。
轉自:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000