1、分支的基礎(chǔ)知識(shí)
1-1闭树、分支的介紹
分支其實(shí)就是指針耸棒,執(zhí)行commit對(duì)象
1-2、創(chuàng)建一個(gè)分支
git branch testing 报辱,可以創(chuàng)建一個(gè)新的分支与殃,此時(shí)這個(gè)分支的指針會(huì)指向當(dāng)前你所在的分支所指向的commit object 上。
如何查看各個(gè)分支指向哪個(gè)commit object 呢碍现?使用 git log --oneline --decorate 命令即可幅疼,會(huì)給你顯示出來(lái)
1-3、切換分支
git checkout testing昼接,此時(shí)就可以切換到 testing 分支爽篷,此時(shí) HEAD 指針會(huì)指向 testing 分支。
git checkout -b testing 慢睡,這是一個(gè)組合命令逐工,創(chuàng)建分支的時(shí)候就切切換到該分支了。
此時(shí)如果在 testing 分支上提交代碼漂辐,那么 commit 樹(shù)就會(huì)長(zhǎng)出一個(gè)新的 commit object 泪喊,而 testing 分支指針會(huì)指向最新的 commit object ,HEAD繼續(xù)指向 testing 分支指針髓涯,而master 指針還是指向之前的那個(gè) commit object袒啼。
git checkout master ,會(huì)切回到 master 分支,此時(shí) HEAD 指針會(huì)指向 master 指針瘤泪,同時(shí)將 master 指針指向的那個(gè) commit object 灶泵,對(duì)應(yīng)的 tree 和 其中的 blob育八,也就是對(duì)應(yīng)文件快照恢復(fù)到工作區(qū)中对途。
2、遠(yuǎn)程分支
在你本地你可以創(chuàng)建一個(gè)分支髓棋,然后開(kāi)發(fā)代碼实檀,但是后續(xù)的話,你肯定是要將本地分支推送到遠(yuǎn)程倉(cāng)庫(kù)里面去的按声。
git push -u origin 分支名稱
這個(gè)命令執(zhí)行膳犹,表示將當(dāng)前所在的分支同后面遠(yuǎn)程的分支名稱關(guān)聯(lián)起來(lái),這樣后面執(zhí)行 git push 或者 git pull的時(shí)候签则,就直接代表拉取或者推送到相應(yīng)的遠(yuǎn)程分支上面去了须床,一般這個(gè)分支名稱就是寫當(dāng)前所在的分支名稱。
如果其他人要將某個(gè)遠(yuǎn)程倉(cāng)庫(kù)的分支拉取下來(lái)渐裂,應(yīng)該執(zhí)行一個(gè)命令豺旬,叫做git fetch origin,就會(huì)抓取下來(lái)遠(yuǎn)程倉(cāng)庫(kù)新增了哪些分支柒凉。
接下來(lái)可以執(zhí)行一個(gè)命令 git checkout -b 本地分支 origin/遠(yuǎn)程分支族阅,然后這個(gè)命令一執(zhí)行,就是在本地創(chuàng)建了一個(gè)遠(yuǎn)程分支對(duì)應(yīng)的本地分支膝捞,互相關(guān)聯(lián)起來(lái)坦刀。以后呢,每次如果別人更新了那個(gè)分支的代碼蔬咬,push 到了遠(yuǎn)程倉(cāng)庫(kù)鲤遥,你可以執(zhí)行 git pull 命令,將這個(gè)分支在遠(yuǎn)程倉(cāng)庫(kù)的代碼拉取下來(lái)林艘,跟本地分支的代碼進(jìn)行合并盖奈。
舉個(gè)栗子:假設(shè)我們公司 git 服務(wù)器地址是 git.leslie.com ,然后我們?nèi)绻胓it clone命令,從這個(gè)服務(wù)器克隆一個(gè)版本庫(kù)下來(lái)北启,git默認(rèn)會(huì)將遠(yuǎn)程版本庫(kù)名為 origin卜朗,同時(shí)在本地創(chuàng)建一個(gè)指向遠(yuǎn)程版本庫(kù)的 master 分支的本地分支,叫做 origin/master咕村。此外场钉,git也會(huì)在本地創(chuàng)建一個(gè) master 分支,內(nèi)容就是跟 origin/master 分支一樣的懈涛。從git 服務(wù)器克隆版本庫(kù)下來(lái)的時(shí)候逛万,遠(yuǎn)程版本庫(kù)的commit 樹(shù)會(huì)一同拷貝下來(lái),然后 origin/master 指向的 commit,就是遠(yuǎn)程版本庫(kù)的master指向的commit宇植,同時(shí)給本地創(chuàng)建的 master 也是指向這個(gè)commit得封。
此時(shí),如果你在本地做了不少開(kāi)發(fā)指郁,然后本地 master 移動(dòng)了好幾個(gè) commit 忙上,同時(shí) origin/master 還是指向最開(kāi)始的那個(gè) commit,而同時(shí)闲坎,遠(yuǎn)程版本庫(kù)上疫粥,其他同事也提交了幾次代碼,因此遠(yuǎn)程版本庫(kù)上的 commit 也移動(dòng)了幾個(gè) commit腰懂,此時(shí)如果要讓本地和遠(yuǎn)程保持同步梗逮,需要使用 git fetch origin 命令,該命令會(huì)將遠(yuǎn)程版本庫(kù)的 commit 樹(shù)和所有的分支都拉取下來(lái)绣溜,跟本地的 commit 樹(shù)進(jìn)行合并慷彤,此時(shí)可能就會(huì)在本地形成一顆有兩個(gè)分叉的 commit樹(shù),本地 origin/master 會(huì)指向遠(yuǎn)程版本庫(kù)的master 指向的那個(gè) commit 怖喻,本地的master 繼續(xù)指向之前本地最新的那個(gè) commit底哗。
3、分支命令管理
git branch | 直接執(zhí)行罢防,會(huì)顯示出當(dāng)前所有分支列表艘虎,以及你在哪個(gè)分支上工作 |
---|---|
git branch -v | 可以顯示出每個(gè)分支當(dāng)前所指向的commit object |
git branch -vv | 在 -v 的基礎(chǔ)上可以顯示本地分支跟蹤的遠(yuǎn)程分支 |
git branch --merged | 可以看到哪些分支被merge 進(jìn)了當(dāng)前分支 |
git branch --no-merged | 可以看到哪些分支還沒(méi)有merger 進(jìn)當(dāng)前分支 |
git branch -d 分支名 | 刪除一個(gè)分支,可能會(huì)提示你被刪除的分支還沒(méi)有被merge到當(dāng)前分支咒吐,<br />不讓你刪除該分支野建,此時(shí)可以使用git branch -D 分支名,強(qiáng)制刪除一個(gè)分支 |