← 上一章:【狀況題】把一個 Commit 拆解成多個 Commit 下一章:【狀況題】想要刪除某幾個 Commit 或是調整 Commit 的順序 →


【狀況題】想要在某些 Commit 之間再加新的 Commit

偶爾你可能會想在某些 Commit 之間再增加一些其它的 Commit,假設目前的歷史紀錄如下:

$ git log --oneline
27f6ed6 (HEAD -> master) add dog 2
2bab3e7 add dog 1
ca40fc9 add 2 cats
1de2076 add cat 2
cd82f29 add cat 1
382a2a5 add database settings
bb0c9c2 init commit

ca40fc9(add 2 cats) 跟 2bab3e7(add dog 1)這兩個 Commit 之間,我想再增加兩個 Commit。這個使用的技巧其實跟上一章「【狀況題】把一個 Commit 拆解成多個 Commit」有點像,都是先停在某個 Commit 之後再來做事。所以起手式一樣是這樣:

$ git rebase -i bb0c9c2

再次提醒大家,在 Rebase 狀態的 Commit 列表跟平常我們看的紀錄是反過來的,所以如果你想在某兩個 Commit 之間再增加 Commit,要注意停下來的那個點是不是正確的點。例如我想加在 add 2 catsadd dog 1 之間:

pick 382a2a5 add database settings
pick cd82f29 add cat 1
pick 1de2076 add cat 2
edit ca40fc9 add 2 cats
pick 2bab3e7 add dog 1
pick 27f6ed6 add dog 2

注意,是停在 add 2 cats 喔,所以我把那個 Commit 改成 edit,接著繼續執行 Rebase:

$ git rebase -i bb0c9c2
Stopped at ca40fc9...  add 2 cats
You can amend the commit now, with

  git commit --amend

Once you are satisfied with your changes, run

  git rebase --continue

接下來,我很快的加兩個 Commit:

$ touch bird1.html

$ git add bird1.html

$ git commit -m "add bird 1"
[detached HEAD 549bd92] add bird 1
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bird1.html

$ touch bird2.html

$ git add bird2.html

$ git commit -m "add bird 2"
[detached HEAD e13837e] add bird 2
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bird2.html

如果眼尖的朋友可能會注意到在 Rebase 的過程中常出現「detached HEAD」字樣,如果忘記它是什麼意思,可以參閱「【狀況題】我可以從過去的某個 Commit 再長一個新的分支出來嗎?」章節說明。

加好 2 個 Commit 之後,就繼續剛剛中斷的 Rebase 吧:

$ git rebase --continue
Successfully rebased and updated refs/heads/master.

這樣就在指定的位置中間增加新的 Commit 了:

add new commit

如果使用 SourceTree,基本上跟上一章「【狀況題】把一個 Commit 拆解成多個 Commit」章節介紹的差不多,也是勾選要中斷的 Commit,然再回到終端機進行操作。搞定之後可在 SourceTree 的功能選單→「Action」→「Continue Rebase」便可完成剩下的 Rebase 指令。


← 上一章:【狀況題】把一個 Commit 拆解成多個 Commit 下一章:【狀況題】想要刪除某幾個 Commit 或是調整 Commit 的順序 →

Comments