[教學] git應用-撿櫻桃的煩惱(cherry-pick標籤合併) - 討論區

[教學] git應用-撿櫻桃的煩惱(cherry-pick標籤合併)

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

特種兵

特種兵圖像(預設)

2021-02-05 17:20:58

From:211.23.21.202

我們知道 cherry-pick 可以只撿我們想要的提交過來就好。

但實際上使用 cherry-pick 來說,還是新產生了一個提交,只是提交的內容和你撿來的提交一樣而已。

就因為是新的提交,所以 commit id 不同。

而 tag 標籤名稱是唯一的,在不同分支也不能重複,他跟著 commit.

問題就來了,我通常在 dev 寫好程式提交後,如果先 tag 正式環境的版號,到時從正式環境 cherry-pick 回來也不會有該標籤。

這個問題,我想到兩個解法。

根本解法

比較正確的進版,在正式與測試環境的版號應該是不同的系統,

所以上測試版用測試版版號,正式版用正式版版號。

這樣就沒有標籤帶不來的問題,反正就是提交後手動 tag 正確的版號即可。

手動解法

如果測試環境是沒有版號的,那麼上測試環境時就都先不給版號。

等到確定合併到正式環境中再 tag 正確的版號即可。

但還有問題尚未解決,就是上版號不只是 tag 版號到提交上而已,而是還需要修改一個檔案的內容將版號打上去,

這樣才能讓使用者在頁尾的地方看到系統目前的版號。

依照我們之前所學,那就是先 cherry-pick 回來,但因為需要再編輯,

所以軟退版,修改好後再推上去並重寫 commit 訊息。感覺上希望有更好的辦法

那就是在 cherry-pick 時加上 -n 參數,它會先將提交內容丟到工作目錄,這樣就不用退版了。

# 我們在 main 分支
$ git log -4 --oneline dev
f942cf5 type: fix system: donor scope: controller/model subject: 修改匯出年度申報資料格式
a0f8e03 type: feature system: donor scope: view/controller/model subject: 在報表分析新增僅匯出年度收據的條件(一般匯出)
b0da907 type: fix system: leave scope: js subject: 讓新增假單的理由欄位至少要兩個字以上才能通過
69a0e37 type: fix system: document scope: view/controller/js subject: 行政後臺查詢所有部門簽呈可以查到所有狀態資料
# 前三個是我們沒有的,想要合併的
$ git cherry-pick -n b0da907
$ git status
 On branch main                                                                  
 Changes to be committed:                                                        
   (use "git restore --staged <file>..." to unstage)                             
         modified:   sys/static/js/create_leave.js                               
         modified:   sys/static/js/create_official_leave.js                      
         modified:   sys/static/js/create_work_overtime.js                       
# 注意一下,它已經是 add 的狀態,也就是編輯完都需要再 add 一次喔
# 修改好也 add 完後
$ git commit
# 會有原本的提交訊息,那就不用完全重寫了

再來,我們補充一下,如果有連續的數十個提交需要撿,有沒有辦法不要一個個看 commit id 慢慢撿。

有的,可以指定開始與結束的 commit id, 在這個區間的提交就會全部撿過來了。

# 由於剛剛合了一個,那先硬退版好了
$ git reset --hard HEAD~
 HEAD is now at d9a8147 type: fix system: donor scope: model subject: 修正註解的 
 錯字                                                                            
# 一次合三個,指定提交區間,使用兩個點 .. 連接
$ git cherry-pick 69a0e37..f942cf5

注意一下,跟 rebase 一樣,第一個指定的開始 commit 不會被合併,所以我們是指定 4..1 才會合併 3,2,1 這三個喔。

那如果加上 -n 呢,就是通通丟到工作目錄,也就是可以直接合併多個 commit 為一個囉。

這樣就不用撿回來還要 rebase 了。
※最後更新時間:2021-02-05 17:23:34 From:211.23.21.202 By:特種兵