git 非常好用,有些實用的行為是由一連串的 git 指令所組成,若能自建一個簡單的指令完成這一連串的動作,是有助於工作效率的提升
情境1: 從目前的分支 rebase dev
1. 將以下的指令存至 to-dev.bat
git fetch
set current_branch=
for /F "delims=" %%n in ('git branch --show-current') do set current_branch=%%n
if "%current_branch%"=="" echo Not a git branch! && goto :EOF
git checkout dev
git pull
git checkout %current_branch%
git rebase --rebase-merges dev
git push -f
:EOF
2. 在 sourceTree terminal 執行 (在 window cmd 不知為何無法生效)
git config --global alias.to-dev '!D:/mygit/to-dev.bat'
如此一來就能使用 git to-dev 就能將 dev 的 commit 拉下後,再以 dev 當基底重整節點推到 remote
非常的好用
情境2: 在 main 分支打 tag
預期的指令
git prd-tag [sequence] [service1] [service2]...
1. 將以下的指令存至 prd-tag.bat
echo off
setlocal enableextensions enabledelayedexpansion
set today=%DATE:~3,4%_%DATE:~8,2%_%DATE:~11,2%
set env=PRD
set seq=%1
set tag=V%today%_%seq%_%env%
git checkout main
git branch --show-current
git fetch
git pull
SET /a counter = 1
for %%I IN (%*) DO (
if !counter! gtr 1 (
set tagCurrent=%tag%_%%I
git tag !tagCurrent!
git push origin !tagCurrent!
)
SET /a counter+=1
)
這邊需要特別注意 for loop 的迴圈裡若使用 %tagCurrent% 會拿到改變前的值
需用 enableextensions 搭配 !tagCurrent! 這樣的形式才能拿到改變後值
cmd 裡的 %DATE% 可能因為國別設定不同,導致輸出的格式也不同,下列的例子就是前兩碼是星期,接著才是年月日的形式
D:\>echo %DATE%
週四 2024/02/22
2. 在 sourceTree terminal 執行
git config --global alias.prd-tag '!D:/mygit/prd-tag.bat'
實際上使用
git prd-tag 01 Member Wallet
會在 main 分支打上今天的日期,加上給予的流水號,以及服務名稱,並推至 remote
V2024_02_22_01_PRD_Member
V2024_02_22_01_PRD_Wallet
參考資料
https://git-scm.com/book/zh-tw/v2/Git-%E5%9F%BA%E7%A4%8E-Git-Aliases
https://gist.github.com/nibro7778/0f41c9335af34f1cc08f5091ce4066de
https://stackoverflow.com/a/7522822