【Git】rebase 用法小結(jié)

歡迎關(guān)注微信公眾號:全棧工廠

本文主要參考

rebase在git中是一個非常有魅力的命令盹舞,使用得當(dāng)會極大提高自己的工作效率熏迹;相反锣吼,如果亂用,會給團隊中其他人帶來麻煩撼玄。它的作用簡要概括為:可以對某一段線性提交歷史進行編輯、刪除饲嗽、復(fù)制聘芜、粘貼;因此趋厉,合理使用rebase命令可以使我們的提交歷史干凈寨闹、簡潔!

前提:不要通過rebase對任何已經(jīng)提交到公共倉庫中的commit進行修改(你自己一個人玩的分支除外)

1.合并多個commit為一個完整commit

當(dāng)我們在本地倉庫中提交了多次君账,在我們把本地提交push到公共倉庫中之前繁堡,為了讓提交記錄更簡潔明了,我們希望把如下分支B、C椭蹄、D三個提交記錄合并為一個完整的提交闻牡,然后再push到公共倉庫。

現(xiàn)在我們在測試分支上添加了四次提交绳矩,我們的目標(biāo)是把最后三個提交合并為一個提交:


這里我們使用命令:

  git rebase -i  [startpoint]  [endpoint]

其中-i的意思是--interactive罩润,即彈出交互式的界面讓用戶編輯完成合并操作,[startpoint] [endpoint]則指定了一個編輯區(qū)間翼馆,如果不指定[endpoint]割以,則該區(qū)間的終點默認(rèn)是當(dāng)前分支HEAD所指向的commit(注:該區(qū)間指定的是一個前開后閉的區(qū)間)。
在查看到了log日志后应媚,我們運行以下命令:

git rebase -i 36224db

或:

git rebase -i HEAD~3 

然后我們會看到如下界面:


上面未被注釋的部分列出的是我們本次rebase操作包含的所有提交严沥,下面注釋部分是git為我們提供的命令說明。每一個commit id 前面的pick表示指令類型中姜,git 為我們提供了以下幾個命令:

  • pick:保留該commit(縮寫:p)
  • reword:保留該commit消玄,但我需要修改該commit的注釋(縮寫:r)
  • edit:保留該commit, 但我要停下來修改該提交(不僅僅修改注釋)(縮寫:e)
  • squash:將該commit和前一個commit合并(縮寫:s)
  • fixup:將該commit和前一個commit合并,但我不要保留該提交的注釋信息(縮寫:f)
  • exec:執(zhí)行shell命令(縮寫:x)
  • drop:我要丟棄該commit(縮寫:d)

根據(jù)我們的需求丢胚,我們將commit內(nèi)容編輯如下:

然后是注釋修改界面:


編輯完保存即可完成commit的合并了:

2.將某一段commit粘貼到另一個分支上

當(dāng)我們項目中存在多個分支翩瓜,有時候我們需要將某一個分支中的一段提交同時應(yīng)用到其他分支中,就像下圖:


我們希望將develop分支中的C~E部分復(fù)制到master分支中携龟,這時我們就可以通過rebase命令來實現(xiàn)(如果只是復(fù)制某一兩個提交到其他分支兔跌,建議使用更簡單的命令:git cherry-pick)。
在實際模擬中骨宠,我們創(chuàng)建了master和develop兩個分支:
master分支:
develop分支:
我們使用命令的形式為:

    git rebase   [startpoint]   [endpoint]  --onto  [branchName]

其中浮定,[startpoint] [endpoint]仍然和上一個命令一樣指定了一個編輯區(qū)間(前開后閉),--onto的意思是要將該指定的提交復(fù)制到哪個分支上层亿。
所以桦卒,在找到C(90bc0045b)和E(5de0da9f2)的提交id后,我們運行以下命令:

    git  rebase   90bc0045b^   5de0da9f2   --onto master

注:因為[startpoint] [endpoint]指定的是一個前開后閉的區(qū)間匿又,為了讓這個區(qū)間包含C提交方灾,我們將區(qū)間起始點向后退了一步。
運行完成后查看當(dāng)前分支的日志:

可以看到碌更,C~E部分的提交內(nèi)容已經(jīng)復(fù)制到了G的后面了裕偿,大功告成?NO痛单!我們看一下當(dāng)前分支的狀態(tài):
當(dāng)前HEAD處于游離狀態(tài)嘿棘,實際上,此時所有分支的狀態(tài)應(yīng)該是這樣:

所以旭绒,雖然此時HEAD所指向的內(nèi)容正是我們所需要的鸟妙,但是master分支是沒有任何變化的焦人,git只是將C~E部分的提交內(nèi)容復(fù)制一份粘貼到了master所指向的提交后面,我們需要做的就是將master所指向的提交id設(shè)置為當(dāng)前HEAD所指向的提交id就可以了重父,即:

      git checkout master
      git reset --hard  0c72e64

此時我們才大功告成花椭!

注:文中如有任何錯誤,請各位批評指正

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末房午,一起剝皮案震驚了整個濱河市矿辽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌郭厌,老刑警劉巖袋倔,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沪曙,居然都是意外死亡奕污,警方通過查閱死者的電腦和手機萎羔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門液走,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贾陷,你說我怎么就攤上這事缘眶。” “怎么了髓废?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵巷懈,是天一觀的道長。 經(jīng)常有香客問我慌洪,道長顶燕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任冈爹,我火速辦了婚禮涌攻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘频伤。我一直安慰自己恳谎,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布憋肖。 她就那樣靜靜地躺著因痛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪岸更。 梳的紋絲不亂的頭發(fā)上鸵膏,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機與錄音怎炊,去河邊找鬼谭企。 笑死用僧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赞咙。 我是一名探鬼主播责循,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼攀操!你這毒婦竟也來了院仿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤速和,失蹤者是張志新(化名)和其女友劉穎歹垫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颠放,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡排惨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了碰凶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暮芭。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖欲低,靈堂內(nèi)的尸體忽然破棺而出辕宏,到底是詐尸還是另有隱情,我是刑警寧澤砾莱,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布瑞筐,位于F島的核電站,受9級特大地震影響腊瑟,放射性物質(zhì)發(fā)生泄漏聚假。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一闰非、第九天 我趴在偏房一處隱蔽的房頂上張望膘格。 院中可真熱鬧,春花似錦河胎、人聲如沸闯袒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽政敢。三九已至,卻和暖如春胚迫,著一層夾襖步出監(jiān)牢的瞬間喷户,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工访锻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留褪尝,地道東北人闹获。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像河哑,于是被迫代替她去往敵國和親避诽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355