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