Git協作
遠程倉庫
當你從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應起來了,並且,遠程倉庫的默認名稱是origin。
要查看遠程庫的信息,用git remote:
或者,用git remote -v顯示更詳細的信息:
上面顯示了可以抓取和推送的origin
的地址。如果沒有推送權限,就看不到push的地址
推送分支
推送分支,就是把該分支上的所有本地提交推送到遠程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上
$ git push origin master
如果要推送其他分支,比如dev,就改成:
$ git push origin dev
但是,並不是一定要把本地分支往遠程推送,那麽,哪些分支需要推送,哪些不需要呢?
master分支是主分支,因此要時刻與遠程同步;
dev分支是開發分支,團隊所有成員都需要在上面工作,所以也需要與遠程同步;
bug分支只用於在本地修復bug,就沒必要推到遠程了,除非老板要看看你每周到底修復了幾個bug;
feature分支是否推到遠程,取決於你是否和你的小夥伴合作在上面開發
抓取分支
多人協作時,大家都會往master和dev分支上推送各自的修改
現在,模擬一個你的小夥伴,可以在另一臺電腦(註意要把SSH Key添加到GitHub)或者同一臺電腦的另一個目錄下克隆:
當你的小夥伴從遠程庫clone時,默認情況下,你的小夥伴只能看到本地的master分支
現在,你的小夥伴要在dev
分支上開發,就必須創建遠程origin
的dev
分支到本地,於是他用這個命令創建本地dev
分支:
$ git checkout -b dev origin/dev
現在,他就可以在dev
上繼續修改,然後,時不時地把dev
分支push
到遠程:
你的小夥伴已經向origin/dev
分支推送了他的提交,而碰巧你也對同樣的文件作了修改,並試圖推送
推送失敗,因為你的小夥伴的最新提交和你試圖推送的提交有沖突,解決辦法也很簡單,Git已經提示我們,先用git pull
把最新的提交從origin/dev
抓下來,然後,在本地合並,解決沖突,再推送:
git pull
也失敗了,原因是沒有指定本地dev
分支與遠程origin/dev
分支的鏈接,根據提示,設置dev
和origin/dev
的鏈接
再pull:
這回git pull
成功,但是合並有沖突,需要手動解決,解決的方法和分支管理中的解決沖突完全一樣。解決後,提交,再push:
fetch和pull
要獲取服務器遠程分支的數據有兩條命令可以使用除了上面使用過的pull命令之外,還有fetch命令
$ git fetch origin 同步遠程服務器origin上master分支的數據到本地
使用fetch命令,只是將origin的數據下載到了本地,但本地的工作目錄只有使用merge合並,才能更新為最新的內容
$ git merge origin/master 合並遠程服務器上的遠程分支master到本地分支master
而如果使用pull命令,則相當於fetch和merge這兩個命令的合並
$ git pull origin 同步遠程服務器origin上master分支的數據到本地,並合並到本地分支master
如果不是默認的master分支,而是其他分支,比如dev分支,則可以使用
$ git pull origin dev
相當於
$ git fetch origin dev $ git merge origin/dev
Git協作