优化推送脚本
This commit is contained in:
@@ -30,8 +30,23 @@ if /i "%confirm%" neq "y" (
|
|||||||
:: 检查是否有更改需要提交
|
:: 检查是否有更改需要提交
|
||||||
echo.
|
echo.
|
||||||
echo [2/4] 检查更改状态...
|
echo [2/4] 检查更改状态...
|
||||||
git diff --quiet && git diff --cached --quiet
|
|
||||||
if %errorlevel% equ 0 (
|
:: 启用延迟变量扩展
|
||||||
|
setlocal enabledelayedexpansion
|
||||||
|
|
||||||
|
:: 检查未暂存的更改
|
||||||
|
git diff --quiet
|
||||||
|
set has_unstaged=%errorlevel%
|
||||||
|
|
||||||
|
:: 检查已暂存的更改
|
||||||
|
git diff --cached --quiet
|
||||||
|
set has_staged=%errorlevel%
|
||||||
|
|
||||||
|
:: 检查未跟踪的文件
|
||||||
|
git ls-files --others --exclude-standard >nul 2>&1
|
||||||
|
set has_untracked=%errorlevel%
|
||||||
|
|
||||||
|
if %has_unstaged% equ 0 if %has_staged% equ 0 if %has_untracked% neq 0 (
|
||||||
echo ℹ️ 没有检测到任何更改,无需提交
|
echo ℹ️ 没有检测到任何更改,无需提交
|
||||||
echo.
|
echo.
|
||||||
echo ✅ 工作区干净,无需推送
|
echo ✅ 工作区干净,无需推送
|
||||||
@@ -39,6 +54,30 @@ if %errorlevel% equ 0 (
|
|||||||
exit /b 0
|
exit /b 0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
:: 显示详细状态
|
||||||
|
echo 📊 详细状态信息:
|
||||||
|
echo 未暂存更改:
|
||||||
|
if %has_unstaged% neq 0 (
|
||||||
|
git diff --name-only
|
||||||
|
) else (
|
||||||
|
echo 无
|
||||||
|
)
|
||||||
|
|
||||||
|
echo 已暂存更改:
|
||||||
|
if %has_staged% neq 0 (
|
||||||
|
git diff --cached --name-only
|
||||||
|
) else (
|
||||||
|
echo 无
|
||||||
|
)
|
||||||
|
|
||||||
|
echo 未跟踪文件:
|
||||||
|
if %has_untracked% neq 0 (
|
||||||
|
git ls-files --others --exclude-standard
|
||||||
|
) else (
|
||||||
|
echo 无
|
||||||
|
)
|
||||||
|
echo.
|
||||||
|
|
||||||
:: 添加所有更改
|
:: 添加所有更改
|
||||||
echo 添加所有更改到暂存区...
|
echo 添加所有更改到暂存区...
|
||||||
git add .
|
git add .
|
||||||
@@ -160,21 +199,54 @@ echo ✅ 提交成功
|
|||||||
:: 推送到远程仓库
|
:: 推送到远程仓库
|
||||||
echo.
|
echo.
|
||||||
echo [4/4] 推送到远程仓库...
|
echo [4/4] 推送到远程仓库...
|
||||||
|
|
||||||
|
:: 先尝试拉取最新更改
|
||||||
|
echo 🔄 检查远程更新...
|
||||||
|
git fetch origin main
|
||||||
|
if %errorlevel% neq 0 (
|
||||||
|
echo ⚠️ 无法获取远程更新,继续推送...
|
||||||
|
) else (
|
||||||
|
echo ✅ 远程更新检查完成
|
||||||
|
)
|
||||||
|
|
||||||
|
:: 推送到远程
|
||||||
git push origin main
|
git push origin main
|
||||||
if %errorlevel% neq 0 (
|
if %errorlevel% neq 0 (
|
||||||
echo ❌ 推送失败
|
echo ❌ 推送失败
|
||||||
|
echo.
|
||||||
echo 💡 可能的原因:
|
echo 💡 可能的原因:
|
||||||
echo - 网络连接问题
|
echo - 网络连接问题
|
||||||
echo - 远程仓库权限不足
|
echo - 远程仓库权限不足
|
||||||
echo - 分支冲突
|
echo - 分支冲突
|
||||||
echo - 需要先拉取远程更改
|
echo - 需要先拉取远程更改
|
||||||
echo.
|
echo.
|
||||||
echo 🔧 建议解决方案:
|
echo 🔧 尝试自动解决冲突...
|
||||||
echo 1. 检查网络连接
|
git pull origin main --rebase
|
||||||
echo 2. 运行: git pull origin main
|
if %errorlevel% equ 0 (
|
||||||
echo 3. 重新运行推送脚本
|
echo ✅ 冲突已解决,重新推送...
|
||||||
|
git push origin main
|
||||||
|
if %errorlevel% equ 0 (
|
||||||
|
echo ✅ 推送成功!
|
||||||
|
) else (
|
||||||
|
echo ❌ 重新推送失败
|
||||||
|
echo.
|
||||||
|
echo 🔧 建议手动解决:
|
||||||
|
echo 1. 运行: git pull origin main
|
||||||
|
echo 2. 解决冲突后运行: git push origin main
|
||||||
pause
|
pause
|
||||||
exit /b 1
|
exit /b 1
|
||||||
|
)
|
||||||
|
) else (
|
||||||
|
echo ❌ 无法自动解决冲突
|
||||||
|
echo.
|
||||||
|
echo 🔧 建议手动解决:
|
||||||
|
echo 1. 运行: git pull origin main
|
||||||
|
echo 2. 解决冲突后运行: git push origin main
|
||||||
|
pause
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
) else (
|
||||||
|
echo ✅ 推送成功!
|
||||||
)
|
)
|
||||||
|
|
||||||
echo.
|
echo.
|
||||||
|
|||||||
@@ -127,6 +127,36 @@ if ($hasChanges -eq 0) {
|
|||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 显示详细状态
|
||||||
|
Write-ColorOutput "`n📊 详细状态信息:" "Yellow"
|
||||||
|
|
||||||
|
# 检查未暂存的更改
|
||||||
|
$unstaged = git diff --name-only 2>$null
|
||||||
|
if ($unstaged) {
|
||||||
|
Write-ColorOutput " 未暂存更改: $($unstaged.Count) 个文件" "Yellow"
|
||||||
|
$unstaged | ForEach-Object { Write-ColorOutput " ~ $_" "Yellow" }
|
||||||
|
} else {
|
||||||
|
Write-ColorOutput " 未暂存更改: 无" "Green"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检查已暂存的更改
|
||||||
|
$staged = git diff --cached --name-only 2>$null
|
||||||
|
if ($staged) {
|
||||||
|
Write-ColorOutput " 已暂存更改: $($staged.Count) 个文件" "Green"
|
||||||
|
$staged | ForEach-Object { Write-ColorOutput " + $_" "Green" }
|
||||||
|
} else {
|
||||||
|
Write-ColorOutput " 已暂存更改: 无" "Green"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 检查未跟踪的文件
|
||||||
|
$untracked = git ls-files --others --exclude-standard 2>$null
|
||||||
|
if ($untracked) {
|
||||||
|
Write-ColorOutput " 未跟踪文件: $($untracked.Count) 个文件" "Cyan"
|
||||||
|
$untracked | ForEach-Object { Write-ColorOutput " + $_" "Cyan" }
|
||||||
|
} else {
|
||||||
|
Write-ColorOutput " 未跟踪文件: 无" "Green"
|
||||||
|
}
|
||||||
|
|
||||||
# 确认操作
|
# 确认操作
|
||||||
if (-not $NoConfirm) {
|
if (-not $NoConfirm) {
|
||||||
Write-ColorOutput "`n❓ 是否继续推送?" "Yellow"
|
Write-ColorOutput "`n❓ 是否继续推送?" "Yellow"
|
||||||
@@ -166,14 +196,60 @@ try {
|
|||||||
|
|
||||||
# 推送到远程
|
# 推送到远程
|
||||||
Write-Step 4 4 "推送到远程仓库"
|
Write-Step 4 4 "推送到远程仓库"
|
||||||
|
|
||||||
|
# 先尝试拉取最新更改
|
||||||
|
Write-ColorOutput "🔄 检查远程更新..." "Cyan"
|
||||||
|
try {
|
||||||
|
git fetch origin main
|
||||||
|
Write-ColorOutput "✅ 远程更新检查完成" "Green"
|
||||||
|
} catch {
|
||||||
|
Write-ColorOutput "⚠️ 无法获取远程更新,继续推送..." "Yellow"
|
||||||
|
}
|
||||||
|
|
||||||
|
# 推送到远程
|
||||||
try {
|
try {
|
||||||
git push origin main
|
git push origin main
|
||||||
Write-ColorOutput "✅ 推送成功" "Green"
|
Write-ColorOutput "✅ 推送成功" "Green"
|
||||||
} catch {
|
} catch {
|
||||||
Write-ColorOutput "❌ 推送失败: $($_.Exception.Message)" "Red"
|
Write-ColorOutput "❌ 推送失败: $($_.Exception.Message)" "Red"
|
||||||
Write-ColorOutput "请检查网络连接和远程仓库权限" "Yellow"
|
Write-ColorOutput "`n💡 可能的原因:" "Yellow"
|
||||||
|
Write-ColorOutput " - 网络连接问题" "White"
|
||||||
|
Write-ColorOutput " - 远程仓库权限不足" "White"
|
||||||
|
Write-ColorOutput " - 分支冲突" "White"
|
||||||
|
Write-ColorOutput " - 需要先拉取远程更改" "White"
|
||||||
|
|
||||||
|
Write-ColorOutput "`n🔧 尝试自动解决冲突..." "Cyan"
|
||||||
|
try {
|
||||||
|
git pull origin main --rebase
|
||||||
|
if ($LASTEXITCODE -eq 0) {
|
||||||
|
Write-ColorOutput "✅ 冲突已解决,重新推送..." "Green"
|
||||||
|
git push origin main
|
||||||
|
if ($LASTEXITCODE -eq 0) {
|
||||||
|
Write-ColorOutput "✅ 推送成功!" "Green"
|
||||||
|
} else {
|
||||||
|
Write-ColorOutput "❌ 重新推送失败" "Red"
|
||||||
|
Write-ColorOutput "`n🔧 建议手动解决:" "Yellow"
|
||||||
|
Write-ColorOutput " 1. 运行: git pull origin main" "White"
|
||||||
|
Write-ColorOutput " 2. 解决冲突后运行: git push origin main" "White"
|
||||||
Read-Host "按任意键退出"
|
Read-Host "按任意键退出"
|
||||||
exit 1
|
exit 1
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Write-ColorOutput "❌ 无法自动解决冲突" "Red"
|
||||||
|
Write-ColorOutput "`n🔧 建议手动解决:" "Yellow"
|
||||||
|
Write-ColorOutput " 1. 运行: git pull origin main" "White"
|
||||||
|
Write-ColorOutput " 2. 解决冲突后运行: git push origin main" "White"
|
||||||
|
Read-Host "按任意键退出"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
Write-ColorOutput "❌ 自动解决冲突失败: $($_.Exception.Message)" "Red"
|
||||||
|
Write-ColorOutput "`n🔧 建议手动解决:" "Yellow"
|
||||||
|
Write-ColorOutput " 1. 运行: git pull origin main" "White"
|
||||||
|
Write-ColorOutput " 2. 解决冲突后运行: git push origin main" "White"
|
||||||
|
Read-Host "按任意键退出"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# 显示结果
|
# 显示结果
|
||||||
|
|||||||
Reference in New Issue
Block a user