最近工作用到了rebase,對于rebase還是有點懵原探,仔細補了一下姿勢几颜。
一般來說,使用rebase主要是為了master分支的干凈逗爹,git干凈對公司來說是非常重要的。
rebase使用場景及原理
對我司來說嚎于,有一版core code是全公司統(tǒng)一的git倉掘而,然后每個team會再clone出自己team的git倉,和core是同步的于购,后臺代碼會時刻sync core和team code袍睡,保證他倆是一致的。這樣做是因為每個team有自己的dev branch肋僧,如果都統(tǒng)一提交到core git上斑胜,分支會非常臟控淡,也不便于管理,所以每個team先在自己的git上管理好自己的master止潘,保證是自己的master是干凈的掺炭,再提PR到core上。
而對于每個team自己的git倉覆山,如何保證master是干凈的呢竹伸?就要用到rebase啦。
假設你從master上checkout了一個新的branch簇宽,做了改動準備merge到master上時勋篓,忽然發(fā)現(xiàn)同事已經(jīng)改了code,并且先你一步merge進了master魏割!這時候你在push會發(fā)現(xiàn)git提示你current branch is behind譬嚣!這時候你根據(jù)之前的經(jīng)驗,先pull了最新的master钞它,然后修改了conflict拜银,重新push了一般代碼。這種情況肯定不少見遭垛,所以漸漸master就慘不忍睹…
而使用rebase尼桶,則能夠避免這一情況。base在整個branch中大致是表示你的branch是從哪個point開始改動的锯仪,所以rebase就是換個base泵督,把你的branch的base換成現(xiàn)在最近的提交版本,這樣master就不會出現(xiàn)分支庶喜,依然是干凈的小腊。
(很沮喪,特意買了塊wacom做筆記結果卻如此難用…
rebase使用方法
首先從自己的分支上check到master久窟,拉取最新的master秩冈。當你用git clone 把git倉庫clone下來時,會自動將這個倉庫地址設為origin斥扛,也可以自己再加一些其他倉庫的地址入问。origin只是一個代號,名字稀颁。
git checkout master
git fetch origin
git merge origin/master
然后再checkout回自己的branch
git checkout [branch_name]
這時候使用rebase把自己的branch的base node改成最新的master
git rebase master
確認修改你自己的branch上的commit队他,其中有個squash命令,可以將你自己的幾次commit合并成一個commit峻村。這樣保存退出后麸折,會開始rebase,如果碰到conflict的情況粘昨,就按照舊方法修改conflict垢啼,
git rebase --continue
參考:https://git-scm.com/book/zh/v2/Git-分支-遠程分支