相關(guān):git branch -d 和 git branch -D 的區(qū)別
前言
git是開(kāi)發(fā)的必備工具,在團(tuán)隊(duì)協(xié)作中,總會(huì)遇到對(duì)本地和遠(yuǎn)程分支的管理,我們就幾個(gè)概念進(jìn)行一個(gè)簡(jiǎn)單的梳理和延伸.
什么是origin/master
,master
,origin
,他們有什么區(qū)別
- origin 遠(yuǎn)程服務(wù)器
- origin/master 遠(yuǎn)程分支
- master 本地分支
origin
在了解origin/master
和master
之前,我們需要先了解一下git clone
做了什么.
假設(shè)有一個(gè)服務(wù)器git.mycompany.com
,執(zhí)行git clone
指令后
1.自動(dòng)將遠(yuǎn)程服務(wù)器命名為
origin
2.下載該服務(wù)下的所有數(shù)據(jù)
3.創(chuàng)建一個(gè)指向master分支的指針,并將該分支命名為origin/master
4.創(chuàng)建名為master的本地分支,并且和遠(yuǎn)程分支在同一個(gè)提交節(jié)點(diǎn)
tips:origin
并不特別,就像分支名master
在git中沒(méi)有任何特殊意義一樣.當(dāng)執(zhí)行git init
時(shí),master
會(huì)作為初始分支的默認(rèn)名字,因此使得master
分支名被廣泛使用.而origin
是執(zhí)行git clone
時(shí)的默認(rèn)服務(wù)器名稱,當(dāng)然可以通過(guò)指令git clone -o cat
,使得默認(rèn)服務(wù)器名稱為cat
,而默認(rèn)遠(yuǎn)程分支為cat/master
.
master & origin/master
master
是默認(rèn)的本地分支,是遠(yuǎn)程分支origin/master
在本地的拷貝
追蹤分支
從遠(yuǎn)程分支check out
一個(gè)本地分支,該本地分支被稱為追蹤分支(tracking branch),被追蹤的分支被稱為上游分支(upstream branch),追蹤分支可以理解為是和遠(yuǎn)程分支有直接關(guān)聯(lián)的本地分支.如果我們?cè)谧粉櫡种r(shí)執(zhí)行git pull
,git會(huì)自動(dòng)知道需要獲取和merge的分支的服務(wù)器.
執(zhí)行git clone
創(chuàng)建了本地倉(cāng)庫(kù)后,會(huì)自動(dòng)創(chuàng)建一個(gè)追蹤origin/master
分支的本地追蹤分支master
,當(dāng)然我們也可以根據(jù)需求添加其他的追蹤分支.
創(chuàng)建新的追蹤分支
可以通過(guò)指令git checkout -b [branch] [remotename]/[branch]
完成
git還提供了通用的--track
簡(jiǎn)寫(xiě)操作: git checkout --track origin/dev
,git checkout --track origin/dev
做了什么呢?
- 分支
dev
被設(shè)定為追蹤服務(wù)器為origin
上的遠(yuǎn)程分支dev
- 切換到
dev
分支上
吸~是不是很簡(jiǎn)單,還有簡(jiǎn)寫(xiě)的簡(jiǎn)寫(xiě),待我速速道來(lái)
如果checkout
的分支本地不存在,但是和遠(yuǎn)程分支名一樣,git會(huì)自動(dòng)創(chuàng)建追蹤分支,并且切換到該分支 : git checkout [branch]
本地分支必須和遠(yuǎn)程分支同名嗎?當(dāng)然不是,我們也可以為本地分支設(shè)置不同于遠(yuǎn)程分支的名字 : git checkout -b aaa origin/bbb
,這樣本地aaa
為遠(yuǎn)程bbb
的追蹤分支.
已有的本地分支追蹤遠(yuǎn)程分支
如果已經(jīng)有一個(gè)本地分支,現(xiàn)在想要關(guān)聯(lián)遠(yuǎn)程分支,或者修改追蹤的上游分支,可以使用-u
或者--set-upstream-to
來(lái)隨時(shí)關(guān)聯(lián),生成新的追蹤分支.
示例: git branch -u origin/cccc
tips:上游分支的簡(jiǎn)寫(xiě):
當(dāng)已經(jīng)設(shè)置了追蹤分支,可以通過(guò)@{upstream}
或 @{u}
來(lái)引用其上游分支,舉例,如果在master
分支上,可以通過(guò)git merge @{u}
等指令來(lái)代替git merge origin/master
查看上游分支
如果需要查看已經(jīng)設(shè)置的上游分支,可以通過(guò)git branch -vv
指令查看
該指令會(huì)列出所有的分支信息,包含追蹤分支的關(guān)聯(lián)關(guān)系.
重要信息: 以上所有信息,都是上次執(zhí)行git fetch
之后的結(jié)果,并不是當(dāng)前服務(wù)器的分支信息,未必是最新的狀態(tài).git branch -vv
并不會(huì)去服務(wù)器獲取數(shù)據(jù),之后顯示在本地已經(jīng)緩存的信息.如果想完全獲取最新的追蹤分支信息,需要更新遠(yuǎn)程信息,執(zhí)行:
git fetch --all; git branch -vv
刪除遠(yuǎn)程分支
如果一個(gè)分支已經(jīng)被廢棄,可以通過(guò)git push origin --delete branchName
來(lái)刪除,還可以簡(jiǎn)寫(xiě)為: git push origin -d branchName
該指令只是移除了對(duì)服務(wù)器的指針引用,git服務(wù)器仍會(huì)保留數(shù)據(jù),直到下一次垃圾回收時(shí)才會(huì)被清理.所以如果是不小心執(zhí)行的刪除,通常還可以被恢復(fù).
刪除分支有兩種寫(xiě)法:git branch -d
和git branch -D
,了解區(qū)別點(diǎn)擊查看