分享程式代碼相關筆記
目前文章總數:157 篇
最後更新:2024年 12月 07日
延續上篇,最後將代碼簽入到 develop 分支
但是尚未合併到 release 分支,目標是找出 develop 分支中尚未簽入的代碼
如圖:是當前分支狀態
最基本的方法是手動開啟 2 個分支
左邊:develop 分支 / 右邊:release 分支,共 3 個簽入未合併
這方法在資料量少時還沒問題,但是資料量多時就不好比對了
※可以想像有10幾個開發者,每個開發完就 Cherry Pick 自己的代碼到 release
我們目標將 develop 合併 到 release,因此先將目標 Switch CheckOUt
選擇 OK 切換完成
接著將 Git Show Log
選擇左上角的 release (當前),點擊
remote -> 選擇 origine/develop -> 滑鼠右鍵 -> compare with working tree
這時下方列出所有 develop 尚未合併到 release 的有差異的檔案
我們目的是找出 develop 的未簽入版號,因此再選擇右上角切換
切換後,下方的檔案 -> 滑鼠右鍵 -> Blame Revisions
展開後,可以輕鬆比對尚未簽入到 release 的 develop 簽入版號
如果使用腳本比對的方式,需將來源、目標同時 CheckOut 下來
develop 分支:
release 分支:
這邊有寫好的 .bat 檔案
貼在 git 目錄上 (有.git 的隱藏資料夾)
以下是代碼簡要說明:
@echo off
setlocal
REM 1. 輸入來源分支
set /p source_branch="Enter source branch name: "
REM 2. 輸入目標分支
set /p target_branch="Enter target branch name: "
REM 3. 找出"來源分支"不在"目標分支"的簽入
for /f "tokens=*" %%i in ('git cherry %target_branch% %source_branch% ^| findstr /B "+"') do (
set "commit=%%i"
REM 4-1. 呼叫比對函式
call :process_commit
)
REM 5. 找完後等待跳出
endlocal
pause
exit /b
REM 4-2. 執行比對
:process_commit
REM 4-3. 提取出簽入的 Git Hash
for /f "tokens=2" %%a in ("%commit%") do (
set "commit_hash=%%a"
)
REM 4-4. 找出的來源 Git Hash 比對是否在 目標的Log中出現
git log %target_branch% | findstr /C:"%commit_hash%" >nul
if %errorlevel%==0 (
echo Commit %commit_hash% has been cherry-picked.
) else (
echo Commit %commit_hash% has not been cherry-picked.
)
exit /b
執行後依序填入分支名稱
source branch | 輸入來源分支名稱,這邊是 develop |
target branch | 輸入目標分支名稱,這邊是 release |
可以快速得知 develop 分支有 4個 GitHash 尚未合併到 release 分支
多出來未合併的是以下這項,原因是 GitFlow 分支策略,會將已開發完成的分支刪除
這個 GitHash 的內容本質上每次都可以忽略
6004b8f988f8a7423e4bad5e198d9ab73f2b6984
透過腳本方法,可以快速比對出尚未 Cherry Pick 的簽入