feat: add one-click git sync button

Combine fetch, pull with rebase, and push into one sync action
Keep remote dropdown focused on safe fetch actions
Block sync when uncommitted changes would conflict with rebase
This commit is contained in:
Bohdan Triapitsyn
2026-05-05 20:45:31 +03:00
parent ddfd2db0b8
commit c80c2b62a8
17 changed files with 217 additions and 209 deletions
+10
View File
@@ -519,13 +519,21 @@ export const dict: Record<I18nKey, string> = {
'gitView.stash.thisWill': '다음 작업을 수행합니다:',
'gitView.stash.title': '커밋하지 않은 변경 사항',
'gitView.sync.fetch': '가져오기',
'gitView.sync.fetchFromRemote': '{name}에서 가져오기',
'gitView.sync.fetchTooltip': '리모트에서 가져오기',
'gitView.sync.commitOrStashTooltip': '동기화하기 전에 변경 사항을 커밋하거나 stash하세요',
'gitView.sync.moreActionsAria': '더 많은 동기화 작업',
'gitView.sync.noRemoteTooltip': '설정된 리모트가 없습니다',
'gitView.sync.pull': '풀',
'gitView.sync.pullTooltip': '변경 사항 풀',
'gitView.sync.pullTooltipBehind': '변경 사항 풀({count}개 뒤처짐)',
'gitView.sync.push': '푸시',
'gitView.sync.pushTooltip': '변경 사항 푸시',
'gitView.sync.pushTooltipAhead': '변경 사항 푸시({count}개 앞섬)',
'gitView.sync.syncChanges': 'Sync Changes',
'gitView.sync.syncChangesTooltip': 'Sync Changes({behind}개 내려받기, {ahead}개 올리기)',
'gitView.sync.syncChangesWithCounts': 'Sync Changes {behind}↓ {ahead}↑',
'gitView.sync.syncCounts': '{behind}↓ {ahead}↑',
'gitView.branch.actionsUnavailable': '현재 레포지토리 상태에서는 브랜치 작업을 사용할 수 없음',
'gitView.conflict.noDetailsAvailable': '충돌 상세 정보 없음',
'gitView.empty.notGitRepository': '이 디렉터리는 Git 레포지토리가 아닙니다',
@@ -669,6 +677,8 @@ export const dict: Record<I18nKey, string> = {
'gitView.toast.pulledFilesPlural': '{name}에서 파일 {count}개를 풀했습니다',
'gitView.toast.pulledFilesSingle': '{name}에서 파일 {count}개를 풀했습니다',
'gitView.toast.pushedToUpstream': '업스트림에 푸시했습니다',
'gitView.toast.commitOrStashBeforeSync': '동기화하기 전에 변경 사항을 커밋하거나 stash하세요',
'gitView.toast.syncedChanges': '변경 사항을 동기화했습니다',
'gitView.toast.rebaseAborted': 'rebase 중단됨',
'gitView.toast.rebaseConflictsDetected': '리베이스 충돌이 감지되었습니다',
'gitView.toast.rebaseStepCompleted': '리베이스 단계 완료됨',