
C:\Users\YOUR USER NAME\AppData\Local\GitHubDesktop\app-3.5.4\resources\app\git\cmd

naming a batch file (sync_all_repo.bat) and put under this folder (D:\SourceCode\Nuvoton)
@echo off
setlocal enabledelayedexpansion
rem === 根目錄根據實際情況修改 ===
set ROOT=%CD%
echo.
echo ========================================
echo Sync all repos under %ROOT%
echo (local changes will be DISCARDED)
echo ========================================
echo.
rem ---------- 掃描兩層目錄:%ROOT%\xxxxx\ -------------
if exist "%ROOT%\.git\" call :UPDATE "%ROOT%"
for /d %%P in ("%ROOT%\*") do (
if exist "%%P\.git\" (
call :UPDATE "%%P"
) else (
REM 再往下一層找
for /d %%Q in ("%%P\*") do (
if exist "%%Q\.git\" call :UPDATE "%%Q"
)
)
)
REM for /r "%ROOT%" %%G in (.git) do (
REM call :UPDATE "%%~dpG.."
REM )
echo.
echo ========= ALL DONE =========
pause
exit /b
rem ===== 子程序:對單一 repo 做強制同步 =====
:UPDATE
set REPO=%~1
echo --- Updating !REPO! ---
pushd "!REPO!" || exit /b
set GIT=C:\Users\xxxx\AppData\Local\GitHubDesktop\app-3.5.4\resources\app\git\cmd\git.exe
rem 1) 下載遠端最新(含刪除的分支)-------------
"%GIT%" fetch --prune
rem 2) 找遠端預設分支 (main / master) ------------
for /f %%B in ('"%GIT%" symbolic-ref --short refs/remotes/origin/HEAD') do (
for /f %%C in ("%%B") do set BR=%%~nxC
)
rem 3) 強制對齊,拋棄本地改動 --------------------
"%GIT%" reset --hard origin/!BR! >nul
REM "%GIT%" clean -fdx >nul
REM "%GIT%" clean -fdx -e *.bat
"%GIT%" clean -fdx -e sync_all_repo.bat >nul
popd
echo done.
echo.
exit /b
set GIT=C:\Users\xxxx\AppData\Local\GitHubDesktop\app-3.5.4\resources\app\git\cmd\git.exe
"%GIT%" clean -fdx -e sync_all_repo.bat >nul

