正文
有時候在 commit 時沒想清楚,漏掉了幾點要記錄的,或者發現打錯字了想修改,
甚至是工程師因為遇到澳客心情不好罵了幾句,這些都需要改 commit 的提交內容。
以下有幾種方法:
- 把 .git 整個資料夾刪掉
- 使用 git rebase 來修改歷史
- 先把 commit 用 git reset 拆掉,整理後再重新 commit
- 使用 --amend 參數來修改最後一次的 commit 紀錄
第一種最好不要做,因為這樣整個 git 的紀錄都沒了,有點因小失大。
第二和三種之後會介紹,雖然我們上個章節偷用了一下第三種方法。
這邊先介紹最簡單的第四種,不過如果要修改的 commit 不是前一個最新的,那就不行了。
先來看一下現在的紀錄:
$ git log --oneline
93bb4ec (HEAD -> master) 特種兵要我改檔名,讓我很不爽,明明不懂還裝懂
462682d 沒東西
0fdb52f 加入git並新增welcome.txt檔案
看來最新一筆的 commit 內容有點不妙,讓我們加上 --amend
參數來修改
$ git commit --amend -m '將 welcome.txt 更名為 hello.txt'
[master 9f2f6dd] 將 welcome.txt 更名為 hello.txt
Date: Sun Feb 23 22:30:28 2020 +0800
1 file changed, 0 insertions(+), 0 deletions(-)
rename welcome.txt => hello.txt (100%)
如果沒加上 -m
就會跳出預設編輯器要你輸入提交的訊息。
檢查一下:
$ git log --oneline
9f2f6dd (HEAD -> master) 將 welcome.txt 更名為 hello.txt
462682d 沒東西
0fdb52f 加入git並新增welcome.txt檔案
有沒有發現連原本的版本號都變了呢,這就表示雖然只是改 commit 內容,
但對 git 來說其實是一個新的 commit 蓋掉原本的而已。
至於想改更之前的 commit 就要使用 rebase 了,這個之後再說吧。
補充
如果有使用遠端倉庫,做這個動作後 push 上去都會發生錯誤,
目前我的做法是本地端做好後先從遠端倉庫把資料 pull 回來讓他自動 merge 接著再直接 push 回去,
這樣就會多一筆 merge 的 log 紀錄,目前先這樣處理,之後再看看有什麼更好的方式。
關於遠端倉庫,之後會說。