當你從遠程倉庫克隆時,實際上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.
小結:
多人協作的工作模式是這樣的:
- 首先,可以試圖用git push origin branch-name推送自己的修改;
- 如果推送失敗,則因為遠程分支比你本地的更新,需要先用git pull試圖合並;
- 如果合並有沖突,則解決沖突,並在本地提交;
- 沒有沖突或者解決掉沖突后,再用git push origin branch-name推送就能成功。
如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關系沒有創建,用
命令 git branch --set-upsream branch-name origin/branch-name