前言
本次文章主要介紹git多人合作的時(shí)候如何使用分支開(kāi)發(fā)傲霸,操作以sourcetree和終端結(jié)合使用。
創(chuàng)建分支
比如master分支上有ABCD四個(gè)commit我們要在D這里開(kāi)一個(gè)新的分支出來(lái)修改bug凛辣。
master :A---B---C---D
1---2---3 fixbug
/
a---b---c----d master
這個(gè)時(shí)候我們分配一個(gè)人修改bug绝编,然后另一個(gè)人開(kāi)發(fā)新功能孕豹,開(kāi)了一個(gè)分支newfunction
f1---f2---f3 new function
/
a---b---c----d master
現(xiàn)在假設(shè)我們的bug改完了,我們這個(gè)時(shí)候應(yīng)該把bugfix這個(gè)分支合并到主分支上,這時(shí)候我們應(yīng)該先把多個(gè)commit合并為一個(gè)辛辨,讓主分支保持簡(jiǎn)潔捕捂。
-
現(xiàn)在的狀態(tài)
- 我們要切換到fixbug分支上,然后點(diǎn)擊終端sourcetree會(huì)自動(dòng)給你切換到這個(gè)分支上
- 首先我們r(jià)ebase下主分支(因?yàn)槲覜](méi)找到在sourcetree上怎么做rebase操作斗搞,只有在終端進(jìn)行rebase 的操作)
- 第一步跟新分支起點(diǎn)绞蹦,因?yàn)榭赡茉谖覀冃薷膄ixbug期間master分支可能已經(jīng)有跟新
rebase master
- 第二步合并fixbug上的多個(gè)commit
-
打印log
git log --oneline
(后面的--oneline是為了讓log看的更清晰,不用打印作者之類的詳細(xì)信息)
我們要合f1榜旦、f2幽七、f3需要在f1前面一個(gè)commit 的id -
執(zhí)行合并命令
git rebase -i b44bc23
s
把f2,f3兩個(gè)commit壓縮到f1里面 -
把f2,f3的pick改為s然后保存退出(
wq
) -
這個(gè)時(shí)候我們回到sourcetree看下?tīng)顟B(tài)
【切記】這個(gè)時(shí)候千萬(wàn)不要拉取遠(yuǎn)端
驶鹉,因?yàn)槲覀儎偛舝ebase操作的只是本地的節(jié)點(diǎn),所以遠(yuǎn)端分支上還是有3個(gè)commit.這時(shí)候我們應(yīng)該直接推送铣墨,但是因?yàn)檫h(yuǎn)端有拉取室埋,直接推送不會(huì)成功,我們需要切換到終端,進(jìn)行強(qiáng)推push -f
(這個(gè)操作一定報(bào)確認(rèn)本地代碼無(wú)誤伊约,在主分支上一般會(huì)設(shè)置受保護(hù)姚淆,不允許push -f) -
完成push -f再查看狀態(tài)只有一個(gè)commit了
-
- 解釋下我們剛才為什么要rebase 主分支,和為什么要把多個(gè)commit合并為一個(gè)
- 首先是rebase 主分支超埋。假設(shè)master分支是我們線上App Store的版本搏讶,然后我們要開(kāi)發(fā)一個(gè)新的朋友圈功能,但是朋友圈功能不是一兩天就開(kāi)發(fā)完成的霍殴。在我們開(kāi)發(fā)這個(gè)新功能的時(shí)候我們線上的版本可能會(huì)遇到緊急的bug(比如崩潰)這時(shí)候我們就要先在master上修改并且上傳媒惕,這導(dǎo)致了我們朋友圈分支的代碼并沒(méi)有修改剛才的崩潰bug。這時(shí)候我們要做的就是把朋友圈分支的起點(diǎn)更新来庭,就用到了我們的rebase master這個(gè)命令(后面的master是分支名字妒蔚,也可以rebase到其他分支上)
- 為什么要合并多個(gè)commit:這是為了主分支的整潔,比如朋友圈分支,開(kāi)發(fā)完后我們很多commit可能只是為了整理代碼面睛,而且我們最后只關(guān)心的是你把這個(gè)功能做完了絮蒿,以面向?qū)ο蟮乃枷胱鸢幔皇敲嫦蜻^(guò)程的保留所有的commit叁鉴。
ps:前端時(shí)間同事,修改一個(gè)功能修改了大量代碼佛寿,很久以后發(fā)現(xiàn)一個(gè)以前沒(méi)有的bug(這時(shí)候已經(jīng)修改了很多其他東西)我們開(kāi)始追溯commit幌墓,好在他把改動(dòng)的commit都合并成了一個(gè),發(fā)現(xiàn)在他commit之前的代碼就是ok的冀泻,這也反應(yīng)了清晰的主分支也方便我們以后查找因?yàn)楦膭?dòng)帶來(lái)的bug
- 附加一個(gè)回退版本常侣,有時(shí)候我們想把代碼回退到某一個(gè)節(jié)點(diǎn)
千萬(wàn)不要拉取
我們還是push -f
強(qiáng)推上去
各位大神有什么其他常用的git命令也分享分享舞肆,一起學(xué)習(xí)進(jìn)步。
喜歡動(dòng)畫(huà)的朋友可以關(guān)注我的GitHub https://github.com/aizexin/AIAnimationDemo