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