想要在兩個 commit 之間再增加新的 commit 也可以
其實做法跟拆解 commit 的動作差不多
都是利用 rebase 的 edit 來進行的
# 看一下現在的前 5 個 log
$ git log --oneline -5
3d914e7 (HEAD -> master) 複製一個 test.py 蓋掉原本的同名檔案
6dd175d 在 log.txt 加了第三行
316ffbc 在 hello.txt 加入第3行
d78c4ff 刪掉生活班232小時課表--0610.doc 與 abc.txt
d7de1ff 我也加了生活班232小時課表--0610.doc
我想在 6dd175d
與 316ffbc
之間再加兩個 commit
那我們就把 rebase 設在更早一個的 d78c4ff
上:
$ git rebase -i d78c4ff
# 並且把 316ffbc 的 pick 改成 edit 存檔離開
# 再次提醒, rebase -i 的順序跟 log 是相反的,我們要編輯的是比較早的那一個
edit 316ffbc 在 hello.txt 加入第3行
pick 6dd175d 在 log.txt 加了第三行
略
接著就是做要新增 commit 的事情:
# 刪掉 ooqq.txt
$ rm -f ooqq.txt
$ git status
interactive rebase in progress; onto d78c4ff
Last command done (1 command done):
edit 316ffbc 在 hello.txt 加入第3行
Next commands to do (2 remaining commands):
pick 6dd175d 在 log.txt 加了第三行
pick 3d914e7 複製一個 test.py 蓋掉原本的同名檔案
(use "git rebase --edit-todo" to view and edit)
You are currently splitting a commit while rebasing branch 'master' on 'd78c4ff'
.
(Once your working directory is clean, run "git rebase --continue")
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: ooqq.txt
no changes added to commit (use "git add" and/or "git commit -a")
# 接下來的動作不用我多說了吧
$ git add ooqq.txt
$ git commit -m '刪除 ooqq.txt'
[detached HEAD 13a95ad] 刪除 ooqq.txt
1 file changed, 1 deletion(-)
delete mode 100644 ooqq.txt
有看到 detached HEAD
這個斷頭關鍵字吧,因為現在我們算是處在 rebase 的其中一個臨時空間中,
並不是在一般的 HEAD 指向上,所以會有這個提示字樣。
# 再看一下狀態
$ git log --oneline -3
13a95ad (HEAD) 刪除 ooqq.txt
316ffbc 在 hello.txt 加入第3行
d78c4ff 刪掉生活班232小時課表--0610.doc 與 abc.txt
# 新增一個 qqoo.txt 檔案再做一個 commit
$ touch qqoo.txt
$ git add .
$ git commit -m '新增 qqoo.txt'
[detached HEAD 9a73d0c] 新增 qqoo.txt
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 qqoo.txt
# 再看一下狀態
$ git log --oneline -3
9a73d0c (HEAD) 新增 qqoo.txt
13a95ad 刪除 ooqq.txt
316ffbc 在 hello.txt 加入第3行
應該沒問題,那就完成後續的 rebase 吧
$ git rebase --continue
Successfully rebased and updated refs/heads/master.
# 看到 Successfully 關鍵字就可以收工囉
$ git log --oneline -5
aee4e62 (HEAD -> master) 複製一個 test.py 蓋掉原本的同名檔案
0338589 在 log.txt 加了第三行
9a73d0c 新增 qqoo.txt
13a95ad 刪除 ooqq.txt
316ffbc 在 hello.txt 加入第3行
沒問題,再次成功動了手腳。