From 796ffcfe00a7cad8583dbb306fa91dbe71075bfe Mon Sep 17 00:00:00 2001 From: liuyh Date: Fri, 30 Jan 2026 12:01:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BC=80=E5=8F=91=E8=80=85=E9=9D=A2?= =?UTF-8?q?=E6=9D=BF=E9=A1=B5=E9=9D=A2git=E5=B7=A5=E5=85=B7=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=8E=A8=E9=80=81=E8=BF=9C=E7=A8=8B=E4=BB=93=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dev/panel/components/version-control.tsx | 39 +++++++++++++++++-- src/server/routers/dev/panel.ts | 20 ++++++++++ src/server/utils/git-helper.ts | 16 ++++++++ 3 files changed, 72 insertions(+), 3 deletions(-) diff --git a/src/app/(main)/dev/panel/components/version-control.tsx b/src/app/(main)/dev/panel/components/version-control.tsx index 2fb60bf..4dde285 100644 --- a/src/app/(main)/dev/panel/components/version-control.tsx +++ b/src/app/(main)/dev/panel/components/version-control.tsx @@ -1,4 +1,4 @@ -import { GitBranch, GitCommit as GitCommitIcon, CornerRightUp, RotateCcw, AlertTriangle, RefreshCw, GitCommit } from 'lucide-react' +import { GitBranch, GitCommit as GitCommitIcon, CornerRightUp, RotateCcw, AlertTriangle, RefreshCw, GitCommit, Upload } from 'lucide-react' import { Button } from '@/components/ui/button' import { Separator } from '@/components/ui/separator' import { trpc } from '@/lib/trpc' @@ -73,7 +73,7 @@ export function VersionControl({ isOpen }: { isOpen: boolean }) { const [isLoadingMore, setIsLoadingMore] = React.useState(false) const [commitType, setCommitType] = React.useState<'normal' | 'amend' | null>(null) const [confirmAction, setConfirmAction] = React.useState<{ - type: 'checkout' | 'checkout-branch' | 'revert' | 'reset' + type: 'checkout' | 'checkout-branch' | 'revert' | 'reset' | 'push' commitId?: string message?: string title?: string @@ -191,6 +191,17 @@ export function VersionControl({ isOpen }: { isOpen: boolean }) { }, }) + // 推送远程仓库mutation + const pushToRemoteMutation = trpc.devPanel!.pushToRemote.useMutation({ + onSuccess: (data) => { + toast.success(data.message) + setConfirmAction(null) + }, + onError: (error) => { + toast.error(error.message) + }, + }) + // 处理分支选择(仅用于查看历史,不切换实际分支) const handleBranchChange = (branchName: string | null) => { if (!branchName) return @@ -306,9 +317,21 @@ export function VersionControl({ isOpen }: { isOpen: boolean }) { resetToCommitMutation.mutate({ commitId: confirmAction.commitId }) } break + case 'push': + pushToRemoteMutation.mutate({ branchName: selectedBranch }) + break } } + // 处理推送远程仓库 + const handlePushToRemote = () => { + setConfirmAction({ + type: 'push', + title: '推送到远程仓库', + description: `确定要将分支 "${selectedBranch}" 的最新提交推送到远程仓库吗?`, + }) + } + // 手动刷新所有数据 const handleRefresh = () => { refetchBranches() @@ -357,7 +380,7 @@ export function VersionControl({ isOpen }: { isOpen: boolean }) { - {/* 右半部分:Commit按钮和刷新按钮 */} + {/* 右半部分:Commit按钮、推送按钮和刷新按钮 */}
+ {selectedBranch && !selectedBranch.startsWith('origin/') && ( + + )}