Git 多人協作開發


當你從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應起來了,並且你的遠程倉庫的默認名稱是origin

查看遠程庫的信息,用git remote

LV@LV-PC MINGW32 /c/gitskill (dev)
$ git remote
origin

或者,用git remote -v 查看更詳細的信息:

LV@LV-PC MINGW32 /c/gitskill (dev)
$ git remote -v
origin https://github.com/LvLoveYuForever/gitskill.git (fetch)
origin https://github.com/LvLoveYuForever/gitskill.git (push)

上面顯示了可以抓取和推送的origin的地址。如果沒有推送權限,就看不到push的地址

推送分支,就是把該分支上的所有本地提交推送到遠程庫,推送時,要指定本地分支,這樣,

Git就會把該分支推送到遠程庫對應的遠程分支上:

LV@LV-PC MINGW32 /c/gitskill (dev)
$ git push origin master
Username for 'https://github.com': lvloveyuforever@gmail.com
Password for 'https://lvloveyuforever@gmail.com@github.com':
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 406 bytes | 0 bytes/s, done.
Total 4 (delta 2), reused 0 (delta 0)
To https://github.com/LvLoveYuForever/gitskill.git
8e64728..dbfc0ee master -> master

如果要推送其它的分支,比如dev,就改成:

LV@LV-PC MINGW32 /c/gitskill (dev)
$ git push origin dev
Username for 'https://github.com': lvloveyuforever@gmail.com
Password for 'https://lvloveyuforever@gmail.com@github.com':
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/LvLoveYuForever/gitskill.git
* [new branch] dev -> dev

但是,並不是一定要把本地的分支往遠程推送,那么,那些分支需要推送呢?那些不需要呢?

  • master分支是主分支,因此時刻與遠程同步;
  • dev分支是開發分支,團隊的所有成員需要在上面工作,所以也需要與遠程同步;
  • bug分支只用於本地修復bug用的,就沒有必要推送到遠程了,除非你的老板要看看你每周到底修復了幾個bug;
  • feature分支是否推送到遠程,取決你是否和小伙伴們在上面開發;

總之,在Git中,分支完全可以在本地自己藏着玩,是否推送,看你的心情而定了

抓取分支:

多人協作時,大家都會往master和dev分支上推送各自的修改

多個人分別用git clone https://github.com/LvLoveYuForever/gitskill.git

都克隆到本地,默認情況下只能看到本地的master分支,不信可以用git branch命令看看:

LV@LV-PC MINGW32 /c/gitskill (master)
$ git branch
* master

現在,你的小伙伴要在dev分支上開發,就必須創建遠程origin的dev分支到本地,於是可以用

$ git checkout -b dev origin/dev

現在,他就可以在dev上繼續修改,然后,把修改的內容push到遠程

你的小伙伴已經向origin/dev分支上推送了他的提交,而碰巧你也對文件做了修改,並試圖推送,

$ git push origin dev

這樣會推送失敗,因為你試圖提交的跟你小伙伴推送的提交有沖突,解決辦法很簡單。

Git提示告訴我們,先用git pull把最新的提交從origin/dev上抓下來,然后在本地合並,解決沖突后,再推送:

$ git pull

如果 git pull失敗了,原因是沒有指定本地的dev和遠程origin/dev上的鏈接

$ git branch --set-upstream dev origin/dev 再pull

$ git pull 這樣git pull是成功的,但是合並出現沖突,需要手動解決,解決的方法和分支管理中的解決沖突完全一樣,解決后,提交,再push.

 

小結:

多人協作的工作模式是這樣的:

  1. 首先,可以試圖用git push origin branch-name推送自己的修改;
  2. 如果推送失敗,則因為遠程分支比你本地的更新,需要先用git pull試圖合並;
  3. 如果合並有沖突,則解決沖突,並在本地提交;
  4. 沒有沖突或者解決掉沖突后,再用git push origin branch-name推送就能成功。

如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關系沒有創建,用

命令 git branch --set-upsream branch-name origin/branch-name

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM