iT邦幫忙

2022 iThome 鐵人賽

DAY 24
2
Modern Web

我的床邊故事Git and GitHub系列 第 24

第24夜 Git commit 如何修改 關鍵字 reset、amend、rebase

  • 分享至 

  • xImage
  •  

行前提要

熊熊想起來,居然沒聊聊修改commit這部分,
就不等晚上了,現在就是現在!
不管你是像我一樣,錯字太平洋或者沒想法暫時隨便留言,
但自己獨立作業或練習就算了,協作或者工作可不能隨便開玩笑,
如今需要折返修改,那絕對需要使用這幾個指令
BTW我們可以修改任意過去commit,但必須是在push上去前哦~

$ git reset
透過回去某某步驟,拆掉重新commit,就像拆合併一次一樣,
但是如果是拆前面commit 要 add 時,後面東西都會變成一大包的 commit 。
第11夜 Git的線圖解讀 2 merge 、 reset

$ git commit --amend
修改最後一個(最新一次)commit
amend 本意就是修改,git commit 加上後面這參數可以達到修正 commit 效果,
但只能是最後一次的紀錄,沒辦法越級的~

$ git rebase -i HEAD
可以直接對需要更改的過去commit 單一修改!多個修改!

來點情境看看以上咒語怎麼處理。

git commit --amend

哎呀瞧瞧我在 commit 時要打 add dog 誤打成 god
太糗了吧,及早發現及早治療!
https://ithelp.ithome.com.tw/upload/images/20221004/20150181dJEdTXC3OA.png
如同上面提到的上一筆 commit 我可以使用$ git commit --amend
咦!這終端機畫面是不是有點熟悉,居然跑到 vi 模式,原來是在vi模式更改 commit 訊息,
步驟是如出一轍的,第7晚 Git commit 番外篇 - vi模式
https://ithelp.ithome.com.tw/upload/images/20221004/20150181fU7T5vVJ6s.png

https://ithelp.ithome.com.tw/upload/images/20221004/20150181ZnB1DNlBUu.png

也是可以不用進入到 vi 模式,就一口氣打完吧~
下面就來示範一口氣操作
$ git commit --amend -m "my new commit message"
https://ithelp.ithome.com.tw/upload/images/20221004/2015018158KzBgCbZ0.png
https://ithelp.ithome.com.tw/upload/images/20221004/20150181nBySIcKl3l.png

git rebase -i HEAD

舉例來說 我看到前兩步的 pig 想要換成別的,改成 shark (兒歌響起 baby~
$ git rebase -i HEAD~2
看來又來到 vi 模式囉~經過前面幾次的嘗試應該跟我一樣不害怕了吧(游刃有餘?
看它好熱心,介紹了很多用法呢~
https://ithelp.ithome.com.tw/upload/images/20221004/2015018106r98vQnAY.png
我們就專注在修改 commit 內容就好。
透過 r 縮寫, reword 可以來重新編輯訊息好讚
本來進入都是 pick ,我們一樣使用 vi 模式編輯, pick 改成 r
它會 focus 在需要編輯的部分,我就把 add pig 改成 add shark 寫入並提交離開。
(有可以一口氣把需要改的 pick 都改成 r 進行多個批次修改)



小結

之前只會reset,導致後面 commit 會變成一大包,沒有很喜歡。
自從發現$ git commit --amend $ git rebase -i HEAD
也太好用了吧,現在我不害怕更改過去 commit 了XD
赫然發現 vi 模式也太常出現了吧,果然水很深。

參考文獻

為你自己學 Git
Git 更改舊的 commit 訊息


上一篇
第23夜 透過 GitHub 管理追蹤專案開發 Issue Projects
下一篇
第25夜 .gitkeep keep what?
系列文
我的床邊故事Git and GitHub31
.

1 則留言

0
json_liang
iT邦研究生 4 級 ‧ 2022-10-04 17:00:23

vi 要切換命令模式跟編輯模式真的操作不簡單

我要留言

立即登入留言