iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0

當今天Git commit 數越來越多時,有時候會遇到比較難整理的情況,因此我們可以考慮整理一下Git commit紀錄了。

1. 修改commit 訊息

https://ithelp.ithome.com.tw/upload/images/20231002/20162648bQ6yWsnOmo.png

  1. 使用rebase的互動模式 : git rebase -i cc797cdb

    • 這個指令會讓進入rebase 互動模式到 SHA-1 cc797cdb, 也就是"init commit"這個comment的位置
  2. 互動模式中表示是反過來的, 最下面的才是最新的
    pick ⇒ 表示保留不動
    r ⇒ 要更改

    • 將要修改的改成r ⇒ :wq 離開vi
      https://ithelp.ithome.com.tw/upload/images/20231002/20162648f3bwodq9CV.png
  3. 會再進入要更改commit 的vi 編輯器
    add hello ⇒ add hello_v2
    add container ⇒ add container_v2
    ⇒ 一樣修改完:wq 退出
    https://ithelp.ithome.com.tw/upload/images/20231002/20162648TRpLyC8mzI.png

  4. 最後兩個commit的內容都有改了
    但因為這commit文字改了 ⇒ sha-1 也會改 ⇒ 整串的sha-1 都會更改
    https://ithelp.ithome.com.tw/upload/images/20231002/20162648k3tRqVEvSR.png

2. 多個commmit合併

  • 將add dog1 & dog2 作合併
    https://ithelp.ithome.com.tw/upload/images/20231002/20162648UekBzctY6X.png
  1. git rebase -i cd82f 進入互動模式
    https://ithelp.ithome.com.tw/upload/images/20231002/20162648a9dEcftCgX.png

  2. 將"add dog2" 這個commit從 pick ⇒ 改成 s (squash) 融合至上個提交
    https://ithelp.ithome.com.tw/upload/images/20231002/20162648Sw8KGKBIfG.png

  3. 更改commit
    https://ithelp.ithome.com.tw/upload/images/20231002/20162648YAAEjNu9Dp.png

  4. 合併完成
    https://ithelp.ithome.com.tw/upload/images/20231002/20162648QZTGBDgsWJ.png

3. commit拆解成多個

讓我們把剛剛合併的兩個 commit 重新拆回去變成兩個

  1. 一樣使用使用互動模式 rebase: git rebase -i cd82f

  2. pick 改成 e
    https://ithelp.ithome.com.tw/upload/images/20231002/20162648opwLOx2XAx.png

  3. git reset head~1 把這個commit拆掉重做
    (不要用加上hard)因為我們要留在這個編輯模式
    ⇒ 再把兩個檔案分別add, commit
    https://ithelp.ithome.com.tw/upload/images/20231002/20162648J8NkGyAMTa.png

  4. 結束後 ⇒ git rebase --continue
    https://ithelp.ithome.com.tw/upload/images/20231002/20162648KDAisCcdCO.png

4. Revert

  • Revert ⇒ 多作一個commit來抵銷前一個commit作的事情
    https://ithelp.ithome.com.tw/upload/images/20231002/20162648YSAjVrL62i.png

  • git revert HEAD
    ⇒ :wq 存檔離開
    https://ithelp.ithome.com.tw/upload/images/20231002/201626487KVzNaZGCa.png

  • 就會多出一個revert 的 commit
    https://ithelp.ithome.com.tw/upload/images/20231002/20162648ipbGbLooXj.png

Reset、Revert 跟 Rebase 指令有什麼差別?

  • 大致整理了一下Reset, Revert 還有 Rebase 這三個的主要差別,還有會不會影響commit的sha-1值
    https://ithelp.ithome.com.tw/upload/images/20231002/20162648NphYedJmD7.png

上一篇
[Day 16] Git 4: 使用分支(branch)
下一篇
[Day 18] GitHub
系列文
30天從零到有,帶你進入程式的世界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言