首頁

目前文章總數:157 篇

  

最後更新:2024年 12月 07日

0059. Git - GitFlow 分支策略下的合併方式 Merge 與 Cherry Pick

日期:2023年 12月 17日

標籤: C# Asp.net Core Web MVC Web Git GitHub TortoiseGit

摘要:C# 學習筆記


解決問題:如何使用 TortoiseGit Merge git分支,主要兩種方法 Merge 與 Cherry Pick
基本介紹:本篇分為三大部分。
第一部分:Merge 合併
第二部分:Cherry Pick 合併
第三部分:GitFlow 策略下,合併選擇方式






第一部分:Merge 合併

Step 1:當前分支範例 - 1

關於GitFlow 分支策略,可以點連結參考
目前 GitFlow分支策略下的分支如圖


Step 2:當前分支範例 - 2

依照分支,每個分支都 CheckOut 用資料夾分別,便於說明


Step 3:當前 feature_NewFunction

在 feature_NewFunction 有簽入兩次代碼。分別是:
第1次簽入
第2次簽入


Step 4:開始合併到 develop - 1

選擇 develop 分支 -> 開啟 merge


Step 5:開始合併到 develop - 2

打開 …


Step 6:開始合併到 develop - 3

依序選擇遠端分支 -> feature_NewFunction -> OK


Step 7:開始合併到 develop - 4

可以看到 merge 方式,會將目標分支 ( feature_NewFunction ) 上所有的簽入合併到 develop
對應step3. 2次簽入


Step 8:開始合併到 develop - 5

Push 到遠端


Step 9:Merge 完成

檢視 GitHub 上,Merge 合併完成




第二部分:Cherry Pick 合併


Step 1:當前 feature_NewFunction - 1

在 feature_NewFunction 有簽入兩次代碼。分別是:
第3次簽入
第4次簽入


Step 2:當前 feature_NewFunction - 2

其中最後一次簽入,我們並不想合併到分支,這時就可以用 Cherry Pick 合併


Step 4:Cherry Pick到 develop - 1

選擇 develop 分支 -> 開啟 show log


Step 5:Cherry Pick到 develop - 2

我們當前在 develop ,選擇左上角的分支,要進行選擇


Step 6:Cherry Pick到 develop - 3

依序選擇 remote -> feature_NewFunction 分支 -> OK


Step 7:Cherry Pick到 develop - 4

我們當前在 develop 分支,選擇了遠端 feature_NewFunction 的這個簽入
選擇 Cherry Pick This Commit…


Step 8:Cherry Pick到 develop - 5

Pick All -> 打勾 -> Continue
這個打勾是為了能辨識是用 Cherry Pick 合併的紀錄


Step 9:Cherry Pick到 develop - 6

檢查當前本地的 develop ,可以發現已經 Cherry Pick 完成


Step 10:Cherry Pick到 develop - 7

Push 到遠端


Step 11:Cherry Pick 完成

完成了 Cherry Pick 合併完成(挑選合併)


第三部分:GitFlow 策略下,合併選擇方式

Step 1:結論 - 拒絕 ReBase

GitFlow 分支策略下,Rebase 的特性會把簽入的資訊覆蓋,因此不合適



Step 2:結論 - 適合 Merge

GitFlow 分支策略下,以 feature_NewFunction 分支來看
如果滿足以下條件,可以用 Merge 合併:

條件 說明
1. 只有自己開發此分支 如果此分支只有自己開發,用 Merge 並不會影響別人,亦不會造成衝突
2. 團隊內部統一合併 定期開發到一個階段,統一由某個開發成員做合併 (管理者),然後開始請 QA 驗證



Step 3:結論 - 適合 Cherry Pick

GitFlow 分支策略下,以 feature_NewFunction 分支來看
如果滿足以下條件,可以用 Cherry Pick 合併:

條件 說明
1. 團隊同時多個開發成員 每個成員都有各自的開發功能,需要各成員確保內測完成,才合併自己的內容到 develop
2. 敏捷式迭代驗證 同1. 開發完成後,各開發功能不耦合的情況下,可以請 QA 先行驗證已開發完成的項目