← 上一章:【狀況題】把一個 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 cats
跟 add 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 了:
如果使用 SourceTree,基本上跟上一章「【狀況題】把一個 Commit 拆解成多個 Commit」章節介紹的差不多,也是勾選要中斷的 Commit,然再回到終端機進行操作。搞定之後可在 SourceTree 的功能選單→「Action」→「Continue Rebase」便可完成剩下的 Rebase 指令。
← 上一章:【狀況題】把一個 Commit 拆解成多個 Commit 下一章:【狀況題】想要刪除某幾個 Commit 或是調整 Commit 的順序 →
Comments