[教學] git-24 合併 commit - 討論區

[教學] git-24 合併 commit

文章瀏覽次數 1993 文章回覆數 0

特種兵

特種兵圖像(預設)

2020-04-11 21:44:16

From:1.161.135.159

有時候 commit 比較雜亂就必須合併一下,我們來看這個例子:

# 看最近 4 個 commit 
$ git log --oneline -4                                                          
 82cdfe4 (HEAD -> master) 在 hello.txt 加入第3行                                 
 41c1423 又刪掉 abc.txt                                                          
 b0a547f 刪掉生活班232小時課表--0610.doc                                         
 d7de1ff 我也加了生活班232小時課表--0610.doc                                     

我們想把那兩個刪掉檔案的 commit 合併成一個就好。

所以我們把 rebase 設定在更早一個的 commit 上:

注意,rebase -i 的交互模式顯示 commit 由上到下是由舊到新,

與我們的 log 顯示是由新到舊剛好相反。

$ git rebase -i d7de1ff

pick b0a547f 刪掉生活班232小時課表--0610.doc
pick 41c1423 又刪掉 abc.txt
pick 82cdfe4 在 hello.txt 加入第3行

我們列出前半部需要修改的部分就好,第一個和第二個 commit 需要合併,

所以我們在第二個 commit 把 pick 改成 quash 然後存檔離開

pick b0a547f 刪掉生活班232小時課表--0610.doc
squash 41c1423 又刪掉 abc.txt
pick 82cdfe4 在 hello.txt 加入第3行

接下來就看你是要把本來的註解掉再重新寫一個,還是用修改的方式變成你要的內容存檔離開。

[detached HEAD d78c4ff] 刪掉生活班232小時課表--0610.doc 與 abc.txt              
  Date: Sat Apr 4 17:26:07 2020 +0800                                            
  2 files changed, 2 deletions(-)                                                
  delete mode 100644 abc.txt                                                     
  delete mode 100644 "\347\224\237\346\264\273\347\217\255232\345\260\217\346\231
 \202\350\252\262\350\241\250--0610.doc"                                         
 Successfully rebased and updated refs/heads/master.                             

再觀察一下 log 是不是我們要的結果:

$ git log --oneline -4                                                          
 316ffbc (HEAD -> master) 在 hello.txt 加入第3行                                 
 d78c4ff 刪掉生活班232小時課表--0610.doc 與 abc.txt                              
 d7de1ff 我也加了生活班232小時課表--0610.doc                                     
 fa03700 在 abc.txt 加了一行                                                     

因為兩個 commit 合併成一個,所以看起來比一開始多顯示了一筆 commit 資訊。

這邊附上 rebase -i 互動模式的其他指令說明:

  1. pick:保留该 commit 不變動
  2. reword:保留该 commit,但需要修改该 commit 的訊息
  3. edit:保留该 commit 但要停下来修改该提交的內容,不只是訊息而已
  4. squash:将该 commit 和前一个 commit 合并
  5. fixup:将该 commit 和前一个 commit 合并,但不需要保留该提交的訊息
  6. exec:执行 shell 命令
  7. drop:丢弃该 commit