07/19 本篇章節
第五篇 · 19 章
開始使用 Git
- 01 新增、初始 Repository
- 02 把檔案交給 Git 控管
- 03 工作區、暫存區與儲存庫
- 04 檢視紀錄
- 05 【狀況題】如何在 Git 裡刪除檔案或變更檔名?
- 06 【狀況題】修改 Commit 紀錄
- 07 【狀況題】追加檔案到最近一次的 Commit
- 08 【狀況題】新增目錄?
- 09 【狀況題】有些檔案我不想放在 Git 裡面...
- 10 【狀況題】檢視特定檔案的 Commit 紀錄
- 11 【狀況題】等等,這行程式誰寫的?
- 12 【狀況題】啊!不小心把檔案或目錄刪掉了…
- 13 【狀況題】剛才的 Commit 後悔了,想要拆掉重做…
- 14 【狀況題】不小心使用 hard 模式 Reset 了某個 Commit,救得回來嗎?
- 15 【冷知識】HEAD 是什麼東西?
- 16 【狀況題】可以只 Commit 一個檔案的部份的內容嗎?
- 17 【冷知識】那個長得很像亂碼 SHA-1 是怎麼算出來的?
- 18 【超冷知識】在 .git 目錄裡有什麼東西?Part 1 僅收錄於電子書
- 19 【超冷知識】在 .git 目錄裡有什麼東西?Part 2 僅收錄於電子書
第五篇 · 開始使用 Git
【狀況題】追加檔案到最近一次的 Commit
剛剛完成 Commit,但發現有一個檔案忘了加到,又不想為了這個檔案重新再發一次 Commit...
像上述這個情況,雖然為了這個單一檔案再加送一次 Commit 也不是不行,但有些人有 Commit 的潔癖(例如我),希望每個 Commit 不要太大也不要太小,就剛剛好做到這個 Commit 應該做的事就好。所以如果不想因此再發一次 Commit,想把這個檔案併入最近一次 Commit,可以這樣做:
- 使用
git reset把最後一次的 Commit 拆掉,加入新檔案後再重新 Commit。 - 使用
--amend參數進行 Commit。
這裡先介紹第二種方式,第一種方式會在「 【狀況題】剛才的 Commit 後悔了,想要撤掉重做…」章節進行說明。
例如,我有一個檔案叫做 cinderella.html,想把它加到最後一次的 Commit 裡:
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
cinderella.html
nothing added to commit but untracked files present (use "git add" to track)
假設它剛加進來,它的狀態還是 Untracked。流程上一樣,還是使用 git add 先把檔案加到暫存區:
$ git add cinderella.html
接著在 Commit 的時候加上 --amend 參數:
$ git commit --amend --no-edit
[master 3128d00] update story
Date: Wed Aug 16 05:42:56 2017 +0800
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 cinderella.html
create mode 100644 config/database.yml
這樣就可以把檔案併入最後一次的 Commit。而最後面那個 --no-edit 參數的意思是指「我不要編輯 Commit 訊息」,所以就不會跳出 Vim 編輯器的視窗。
如果使用 SourceTree,一樣也是先把 cinderella.html 檔案勾選至暫存區,在 Commit 的時候,右下角的下拉選單有一個「Amend last commit」選項

Commit 訊息要改不改都可,按下右下角按鈕後就會完成 Commit,這個檔案就會被併到最近的一次 Commit 裡了。
修改歷史
跟前個章節一樣的提醒,像這樣的修改歷史,請儘量不要使用在已經 Push 出去的 Commit 上。