diff --git a/auto_push.bat b/auto_push.bat index cabc566..4186fdf 100644 --- a/auto_push.bat +++ b/auto_push.bat @@ -30,8 +30,23 @@ if /i "%confirm%" neq "y" ( :: 检查是否有更改需要提交 echo. 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 ✅ 工作区干净,无需推送 @@ -39,6 +54,30 @@ if %errorlevel% equ 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 添加所有更改到暂存区... git add . @@ -160,21 +199,54 @@ echo ✅ 提交成功 :: 推送到远程仓库 echo. echo [4/4] 推送到远程仓库... + +:: 先尝试拉取最新更改 +echo 🔄 检查远程更新... +git fetch origin main +if %errorlevel% neq 0 ( + echo ⚠️ 无法获取远程更新,继续推送... +) else ( + echo ✅ 远程更新检查完成 +) + +:: 推送到远程 git push origin main if %errorlevel% neq 0 ( echo ❌ 推送失败 + echo. echo 💡 可能的原因: echo - 网络连接问题 echo - 远程仓库权限不足 echo - 分支冲突 echo - 需要先拉取远程更改 echo. - echo 🔧 建议解决方案: - echo 1. 检查网络连接 - echo 2. 运行: git pull origin main - echo 3. 重新运行推送脚本 - pause - exit /b 1 + echo 🔧 尝试自动解决冲突... + git pull origin main --rebase + if %errorlevel% equ 0 ( + 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 + 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. diff --git a/auto_push.ps1 b/auto_push.ps1 index 7185860..c1fda3b 100644 --- a/auto_push.ps1 +++ b/auto_push.ps1 @@ -127,6 +127,36 @@ if ($hasChanges -eq 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) { Write-ColorOutput "`n❓ 是否继续推送?" "Yellow" @@ -166,14 +196,60 @@ try { # 推送到远程 Write-Step 4 4 "推送到远程仓库" + +# 先尝试拉取最新更改 +Write-ColorOutput "🔄 检查远程更新..." "Cyan" +try { + git fetch origin main + Write-ColorOutput "✅ 远程更新检查完成" "Green" +} catch { + Write-ColorOutput "⚠️ 无法获取远程更新,继续推送..." "Yellow" +} + +# 推送到远程 try { git push origin main Write-ColorOutput "✅ 推送成功" "Green" } catch { Write-ColorOutput "❌ 推送失败: $($_.Exception.Message)" "Red" - Write-ColorOutput "请检查网络连接和远程仓库权限" "Yellow" - Read-Host "按任意键退出" - exit 1 + 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 "按任意键退出" + 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 + } } # 显示结果