iT邦幫忙

2021 iThome 鐵人賽

DAY 22
3
Modern Web

曼曼來比較快_Git 版本控制系列 第 22

【Day22】Git 版本控制 - 修改 commit 紀錄:rebase

  • 分享至 

  • xImage
  •  

commit 版本的時候可以寫下一些訊息,以便他人或未來自己查看的時候可以快速理解。但是,有時候寫程式寫到疲乏,撰寫出來的 commit message 可能就會變成火星文,連自己都看不懂,那有辦法改 commit message 嗎?

當然有!而且有四種辦法:

  1. 把 .git 目錄整個刪除,暴力破解法,請不要輕易嘗試謝謝。
  2. 使用 git rebase 來修改歷史。
  3. 先把 Commit 用 git reset 拆掉,整理後再重新 Commit。
  4. 使用 --amend 參數來修改最後一次的 Commit。

那麼就來先介紹第 2 種辦法吧!第一種就不用介紹了吧:)

git rebase

rebase 可以拆成 re + base,翻成中文大概就是「重新定義 branch 的參考基準」,而 base 指的就是「branch 是怎麼誕生的」,所以 git rebase 這個指令基本上就是在修改歷史,當你在做 rebase 時還會看到這個警告 Make sure your changes have not been pushed to anyone else,因為有可能會造成他人的困擾。

接下來還是講一下他的作業機制,以下圖片與內容取至 另一種合併方式(使用 rebase),原文中的舉例是使用三個 branch,分別是 master、dog、cat,而現在的 head 位置是在 cat 身上

假設使用以下指令:

git rebase dog

他的意思是把 cat 分支改建立到 dog 分支上,有點像剪下貼上的感覺,原文中也有對下圖做更詳細的解釋,如下:

「我先拿 c68537 這個 Commit 接到 053fb2 這個 Commit 上」,因為 c68537 原本的上一層 Commit 是 e12d8e,現在要接到 053fb2 上,所以需要重新計算這個 Commit 的 SHA-1 值,重新做出一顆新的 Commit 物件 35bc96。
「我再拿 b174a5 這個 Commit 接到剛剛那個新做出來的 Commit 物件 35bc96 上」,同理,因為 b174a5 這顆 Commit 要接到新的 Commit 的原因,所以它也會重新計算 SHA-1 值,得到一個新的 Commit 物件 28a76d。
最後,原本的 cat 是指向 b174a5 這個 Commit,現在要改指向最後做出來的那顆新的 Commit 物件 28a76d。
HEAD 還是繼續指向 cat 分支。

Reference

另一種合併方式(使用 rebase)


上一篇
【Day21】Git 版本控制 - git 建立快捷指令 alias
下一篇
【Day23】Git 版本控制 - 修改 commit 紀錄:reset
系列文
曼曼來比較快_Git 版本控制30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言