1. 程式人生 > >手把手git教程(09)--多人協作,推送分支,抓取分支

手把手git教程(09)--多人協作,推送分支,抓取分支

多人協作

當你從遠端庫克隆時候,實際上Git自動把本地的master分支和遠端的master分支對應起來了,並且遠端庫的預設名稱是origin。
要檢視遠端庫的資訊 使用 git remote
要檢視遠端庫的詳細資訊 使用 git remote –v
如下演示:


origin  https://github.com/RTplay/testgit.git (fetch)抓取
origin  https://github.com/RTplay/testgit.git (push)推送

推送分支:

      推送分支就是把該分支上所有本地提交到遠端庫中,推送時,要指定本地分支,這樣,Git就會把該分支推送到遠端庫對應的遠端分支上:
      使用命令 git push origin master
比如我現在的github上的readme.txt程式碼如下:


本地的readme.txt程式碼如下:


現在我想把本地更新的readme.txt程式碼推送到遠端庫中,使用命令如下:

 git push origin master


我們可以看到如上,推送成功,我們可以繼續來截圖github上的readme.txt內容 如下:


可以看到 推送成功了,如果我們現在要推送到其他分支,比如dev分支上,我們還是那個命令 git push origin dev
那麼一般情況下,那些分支要推送呢?
1、master分支是主分支,因此要時刻與遠端同步。
2、一些修復bug分支不需要推送到遠端去,可以先合併到主分支上,然後把主分支master推送到遠端去。

抓取分支:

多人協作時,大家都會往master分支上推送各自的修改。現在我們可以模擬另外一個同事,可以在另一臺電腦上(注意要把SSH key新增到github上)或者同一臺電腦上另外一個目錄克隆,新建一個目錄名字叫testgit2
但是我首先要把dev分支也要推送到遠端去,如下


接著進入testgit2目錄,進行克隆遠端的庫到本地來,如下:


現在目錄下生成有如下所示:


現在我們的小夥伴要在dev分支上做開發,就必須把遠端的origin的dev分支到本地來,於是可以使用命令建立本地dev分支:git checkout  -b dev origin/dev
現在小夥伴們就可以在dev分支上做開發了,開發完成後把dev分支推送到遠端庫時。
如下:



小夥伴們已經向origin/dev分支上推送了提交,而我在我的目錄檔案下也對同樣的檔案同個地方作了修改,也試圖推送到遠端庫時,如下:


由上面可知:推送失敗,因為我的小夥伴最新提交的和我試圖推送的有衝突,解決的辦法也很簡單,上面已經提示我們,先用git pull把最新的提交從origin/dev抓下來,然後在本地合併,解決衝突,再推送。


git pull也失敗了,原因是沒有指定本地dev分支與遠端origin/dev分支的連結,根據提示,設定dev和origin/dev的連結:git branch --set-upstream dev origin/dev如下:


這回git pull成功,但是合併有衝突,(Automatic merge failed; fix conflicts and then commit the result.)需要手動解決,解決的方法和分支管理中的 解決衝突完全一樣。解決後,提交,再push:
我們可以先來看看readme.txt內容了。


現在手動已經解決完了,我接在需要再提交,再push到遠端庫裡面去。如下所示:


因此:多人協作工作模式一般是這樣的:
1、首先,可以試圖用git push origin branch-name推送自己的修改。

2、如果推送失敗,則因為遠端分支比你的本地更新早,需要先用git pull試圖合併。
3、如果合併有衝突,則需要解決衝突,並在本地提交。再用git push origin branch-name推送。

/*-----------------------------------------------------------華麗的分割線--------------------------------------------------------------*/

細心的小夥伴一定會注意到在我們推送分支到github之後我們的網頁顯示了一個新的按鈕


下面我來講解一下這個按鈕是做什麼的。

當我們上傳的分支時需要程式碼owner同意之後才能新增到倉庫中,所以我們需要pull requset給owner請求新增分支到倉庫。完成這個步驟提交的分支程式碼才真正的在倉庫中了。