git合并多個(gè)commit壓縮成一個(gè)點(diǎn)

1.說明

有時(shí)commit多了看著會(huì)不爽.所以想合并掉一些commit. 這里是最簡(jiǎn)單的情況, 一條線下來N個(gè)commit, 合并掉末端的(沒有branch出去的).

假設(shè)有a,b,c,d四個(gè)commit, 從新到舊是a, b, c, d (也就是先d->c->b->a). 四個(gè)commit的SHA-1分別是a1,b1,c1,d1.

合并commit只能倒退, 就是說把a(bǔ)合到b(老的),順序是abc可以合并起來成k, 最后成k, d這樣.

2.過程

# git log |head 
git rebase -i d1
# if fail, use git rebase --abort
git push --force 

git log可以查看commit的情況, 配著head命令可以查看前幾個(gè). git log --pretty=oneline一行一個(gè)commit更好了(默認(rèn)就是如此)

rebase前需要把狀態(tài)push掉. 就是說不能有unstaged的修改.
-i 是選擇不動(dòng)的commit, 比他新的commit都有被修改的可能.

執(zhí)行rebase后如果出錯(cuò)或者merge沖突什么退出來, rebase會(huì)被鎖定, 再次執(zhí)行時(shí), 提示有三個(gè)選項(xiàng):

git rebase --abort來忽略之前的rebase嘗試,并恢復(fù)HEAD到開始的分支.
git rebase --continue就繼續(xù)上次修改, 一般是rebase中間處理merge沖突后使用.
git rebase --skip是重新開始rebase并跳過現(xiàn)在所進(jìn)行的處理.

執(zhí)行rebase后會(huì)像commit一樣進(jìn)入編輯狀態(tài), 在開始會(huì)是幾個(gè)commit的SHA值, 從上到下是越來越新的commit. 如果沒有比-i指定的心的話會(huì)出現(xiàn)noop.
開始狀態(tài)所有出現(xiàn)的commit前面都是pick. 這個(gè)pick是對(duì)該commit進(jìn)行的操作, 有:

  • pick就是說保留該commit, 也可以用縮寫p. (黃色)
  • squash, 使用該commit但合并到前一個(gè)老的commit去(常用). 可以用縮寫s代替 (綠色).
  • reword, 和pick類似, 但可以修改commit時(shí)的提交信息(中間會(huì)彈出來讓你修改commit).可以用縮寫r代替 (紫紅色).
  • edit, 使用commit, 但停下來進(jìn)行修改, 可能用于merge沖突.可以用縮寫e代替.
  • fixup, 和squash類似, 但會(huì)舍棄commit信息. 可以用縮寫f (紅色)
  • exec, 執(zhí)行shell命令.可以用縮寫x

如果該commit是空commit, 前面會(huì)被注釋掉#. 會(huì)被自動(dòng)刪除.
執(zhí)行完修改后,:wq退出vi, 這時(shí)開始進(jìn)行rebase操作(1/10 這樣倒數(shù)). 中間會(huì)再次彈出修改文件, 此時(shí)是修改commit信息, 可以修改每次commit的信息(如果是fixup會(huì)忽略掉commit提交信息). 最后這個(gè)合并后的新commit顯示的信息可能是多個(gè)commit的集合(多行).不想修改或改完后直接:wq退出vi即可.

所以都完成后需要一次強(qiáng)制的push, 要加入--force覆蓋掉github上的commit.git push --force

例如我上面-i d1會(huì)修改3個(gè)commit, 保留最老最上最靠近d1的c (用reword或者pick都可以),其余a1和b1合并掉(squash或者fixup).最后生成一個(gè)新commit叫c2(就是3個(gè)合在一起了).所以從新到舊有c2, d1.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市薛耻,隨后出現(xiàn)的幾起案子浓领,更是在濱河造成了極大的恐慌犯戏,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娘汞,死亡現(xiàn)場(chǎng)離奇詭異歹茶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門辆亏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來风秤,“玉大人,你說我怎么就攤上這事扮叨$拖遥” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵彻磁,是天一觀的道長(zhǎng)碍沐。 經(jīng)常有香客問我,道長(zhǎng)衷蜓,這世上最難降的妖魔是什么累提? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮磁浇,結(jié)果婚禮上斋陪,老公的妹妹穿的比我還像新娘。我一直安慰自己置吓,他們只是感情好无虚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著衍锚,像睡著了一般友题。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上戴质,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天度宦,我揣著相機(jī)與錄音,去河邊找鬼告匠。 笑死戈抄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的后专。 我是一名探鬼主播呛凶,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼行贪!你這毒婦竟也來了漾稀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤建瘫,失蹤者是張志新(化名)和其女友劉穎崭捍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啰脚,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡殷蛇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年实夹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粒梦。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亮航,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出匀们,到底是詐尸還是另有隱情缴淋,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布泄朴,位于F島的核電站重抖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏祖灰。R本人自食惡果不足惜钟沛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望局扶。 院中可真熱鬧恨统,春花似錦、人聲如沸三妈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沈跨。三九已至,卻和暖如春兔综,著一層夾襖步出監(jiān)牢的瞬間饿凛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來泰國打工软驰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涧窒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓锭亏,卻偏偏與公主長(zhǎng)得像纠吴,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子慧瘤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一戴已、Git是什么? 是一個(gè)開源的分布式版本控制系統(tǒng)锅减,可以有效糖儡、高速的處理從很小到非常 大的項(xiàng)目版本管理。 Git ...
    名字誰不會(huì)取閱讀 1,039評(píng)論 0 0
  • 團(tuán)隊(duì)開發(fā)中怔匣,遵循一個(gè)合理握联、清晰的Git使用流程,是非常重要的。 否則金闽,每個(gè)人都提交一堆雜亂無章的commit纯露,項(xiàng)目...
    西門淋雨閱讀 265評(píng)論 0 1
  • 0. 引言當(dāng)你提交代碼進(jìn)行代碼審查時(shí)或者創(chuàng)建一次pull request (這在開源項(xiàng)目中經(jīng)常發(fā)生),你的代碼在被...
    pansly閱讀 47,561評(píng)論 5 9
  • 團(tuán)隊(duì)開發(fā)中代芜,遵循一個(gè)合理埠褪、清晰的Git使用流程,是非常重要的蜒犯。 否則组橄,每個(gè)人都提交一堆雜亂無章的commit,項(xiàng)目...
    清蘂翅膀的技術(shù)閱讀 462評(píng)論 0 0
  • 接到了一個(gè)需求罚随,需要驗(yàn)證一下在深度操作系統(tǒng)中是否適配以下軟件: python2.7 python3.5 gnura...
    緣覺如來閱讀 738評(píng)論 0 1