[人生如果有 git 1 ] git rebase -i (drop)

Jc
6 min readOct 28, 2019

--

上一篇討論到了 git rebase 的用法,其中有個 -i 的互動模式(interactive),也是滿好用的功能,當第一次發現這個可以更改歷史的功能的時候就覺得人生如果有 git 就完美了。

前情提要

小美今年 35 歲,單身,是個事業女強人,在信義區有一棟專屬她的豪宅,幾乎堪稱是人生勝利組。但是即使如此,小美在她 19 歲的時候也有一段與初戀男友小明錯過的悽美愛情,至今她仍無法忘懷,在每當夜深人靜的時候,她總是會默默地流淚想起她們之間的誤會是怎麼產生的,如果當時後的自己可以不要那麼的任性與倔強的話,也許現在又是另外一片不一樣的光景,在這間講話有 echo 的豪宅可能會多出小明那如此溫柔的聲音陪伴她度過此時。

所以簡單地把小美的人生經歷 (commit) 列出來的話,大概會長這個樣子:

小美後悔的人生經歷
$ git log --oneline6b8d834 35歲 空虛寂寞覺得冷
638d040 30歲 再信義區豪宅買了豪宅
3e700fc 25歲 對於分手感到後悔
5a1184a 22歲 出社會工作
09a44f7 19歲 與初戀男友因誤會分手
06d690a 18歲 認識初戀男友熱戀期
e441280 17歲 剛上大學
63389d1 16歲 高中畢業

小美悔恨的發生點是在 19 歲,以及她 25 歲才驚覺她初戀男友小明對她的好的後悔,所以她根本不想要有那些痛苦地回憶,所以她傻傻的想着如果可以不要這兩段回憶就好了。

因爲她前陣子上班太無聊跑去學了 git,在老師上課中才發現原來有 git rebase -i 的方法可以讓她改寫人生,老師是這樣子告訴她的:

git rebase -i她想要回去的時間點

例如是 16 歲的話,就必須要用代表著 16 歲那個時間點的 commit id (63389d1)。

所以如果你想要回到 16 歲的話,你就要這樣子下指令:

$ git rebase -i 63389d1 (16歲)

於是小美就抱持着忐忑的心情,在小黑窗 key 下了這一段指令:

$ git rebase -i 63389d1

於是出現了下面 vim 的編輯畫面

  1 pick e441280 17歲 剛上大學
2 pick 06d690a 18歲 認識初戀男友熱戀期
3 pick 09a44f7 19歲 與初戀男友因誤會分手
4 pick 5a1184a 22歲 出社會工作
5 pick 3e700fc 25歲 對於分手感到後悔
6 pick 638d040 30歲 再信義區豪宅買了豪宅
7 pick 6b8d834 35歲 空虛寂寞覺得冷
8
9 # Rebase 63389d1..6b8d834 onto 63389d1 (7 command(s))
10 #
11 # Commands:
12 # p, pick = use commit
13 # r, reword = use commit, but edit the commit message
14 # e, edit = use commit, but stop for amending
15 # s, squash = use commit, but meld into previous commit
16 # f, fixup = like "squash", but discard this commit's log message
17 # x, exec = run command (the rest of the line) using shell
18 # d, drop = remove commit
19 #
20 # These lines can be re-ordered; they are executed from top to bottom.
21 #
22 # If you remove a line here THAT COMMIT WILL BE LOST.
23 #
24 # However, if you remove everything, the rebase will be aborted.
25 #

移除歷史 (commit)

一瞬間小美的人生就 由最早到最晚 的順序顯示在她眼前,她想起老師告訴她,如果說如果不想要某一段歷史的話,那最簡單的方式就是直接刪除掉那段歷史,或者是把那段歷史最前面的 pick 改成 d 或者是 drop 就可以了,然後記得要按 :x! 存檔出來,你的人生就不再有這兩段歷史了。

小美半信半疑地把下面這整行刪掉

3 pick 09a44f7 19歲 與初戀男友因誤會分手

也在 25 歲前面的 pick,改成 d

5 d 3e700fc 25歲 對於分手感到後悔

所以現在修改過的畫面變成這個樣子:

  1 pick e441280 17歲 剛上大學
2 pick 06d690a 18歲 認識初戀男友熱戀期
3 pick 5a1184a 22歲 出社會工作
4 d 3e700fc 25歲 對於分手感到後悔
5 pick 638d040 30歲 再信義區豪宅買了豪宅
6 pick 6b8d834 35歲 空虛寂寞覺得冷

於是小美按着 :x! 準備離開這個畫面,此時的她心臟因緊張的瘋狂跳躍著,她完全不敢想像她按下 enter 後會變成怎樣,如果真的成真了,小明是不是就要回到她的身邊了,好久沒與小明聯絡不知道第一句話要跟他說些什麼,正當她猶豫不決之餘不小心按到了 enter 鍵。

「噢!不!」小美尖叫著。

映入眼簾的是這個畫面:

$ git rebase -i 63389d1Successfully rebased and updated refs/heads/master.

牆壁上的時鐘滴答滴答的走著,緊張而急促的呼吸完美地表現了小美此時此刻的驚恐,她對於現在不知道會發生什麼事情,是真的成真了嗎?真的移除掉那段歷史了嗎?老師是不是騙人的,只是想騙我學費而已,雪球般的問題在小美的腦海中愈滾越大。

這時候小美想起老師上課有講過 git log --oneline 可以再次檢查自己的經歷,所以她用飛快的速度 key 下了:

$ git log --oneline729bb2a 35歲 空虛寂寞覺得冷
9944680 30歲 再信義區豪宅買了豪宅
9be2b15 22歲 出社會工作
06d690a 18歲 認識初戀男友熱戀期
e441280 17歲 剛上大學
63389d1 16歲 高中畢業

「19 歲與 25 歲的歷史真的消失了!」小美驚呼一聲。

再次回到沉默,此時小美手機的鈴聲打破了這一片沉寂,小美轉頭看著她的手機,上面的來電顯示爲:

小明北鼻

--

--