2b5d7268ed
Server: git-rewrite.js (rebase + continue/skip/abort, rebase-interactive with no editor, reset soft/mixed/keep/hard, undo-rewrite, force-push with lease, remote-branch-delete, remote add/rename/remove) and git-conflicts.js (conflict stages read + conflict-save, reflog), dispatched from runGitAction; operationInProgress now reports a rebase and only ALLOWED_WHILE_REBASING writes run during one. New reads: /git/conflict, /git/reflog, /git/remotes, /git/rewrite-plan. Client: History tools menu, MergeEditor, ReflogView, RebaseDialog, InteractiveRebase, ResetDialog, ForcePushDialog, RemotesDialog, rebase banner Skip. CLAUDE.md git-writes rule rewritten for the new actions.
157 lines
9.6 KiB
JSON
157 lines
9.6 KiB
JSON
{
|
|
"close": "Đóng",
|
|
"cancel": "Huỷ",
|
|
"loading": "Đang tải…",
|
|
"pushed": "đã push",
|
|
"forceAck": "Tôi hiểu: sau đó phải force-push nhánh này",
|
|
"rewrites_other": "Thao tác này viết lại {{count}} commit.",
|
|
"rewritesPushed_other": "Thao tác này viết lại {{count}} commit, trong đó {{pushed}} commit đã push nên sẽ phải force-push.",
|
|
"doneTitle": "Xong.",
|
|
"needsForcePushAfter": "Có commit đã push bị viết lại: khi chắc chắn, hãy push bằng Force push (with lease).",
|
|
"undo": "Hoàn tác",
|
|
"undoConfirm": "Bấm lần nữa để hoàn tác",
|
|
"undoHint": "Đưa nhánh về lại {{sha}} (giữ nguyên thay đổi chưa commit).",
|
|
"undone": "Đã hoàn tác: nhánh đã về chỗ cũ",
|
|
"blocked.subdir": "Thao tác này đổi cả nhánh nên chỉ chạy được từ workspace ở thư mục gốc của repo.",
|
|
"blocked.operation": "Đang có {{op}} dở dang: hãy hoàn tất hoặc huỷ trước.",
|
|
"blocked.dirty": "Hãy commit hoặc bỏ các thay đổi chưa commit trước.",
|
|
|
|
"menu.label": "Công cụ lịch sử",
|
|
"menu.rebase": "Rebase lên nhánh…",
|
|
"menu.interactive": "Sửa các commit chưa push…",
|
|
"menu.reflog": "Reflog",
|
|
"menu.forcePush": "Force push (with lease)…",
|
|
"menu.remotes": "Remote…",
|
|
"menu.resetHere": "Reset nhánh về commit này…",
|
|
"menu.interactiveHere": "Sửa các commit sau commit này…",
|
|
|
|
"merge.open": "Trình gộp 3 bên",
|
|
"merge.title": "Gộp conflict — {{path}}",
|
|
"merge.incoming": "Bên đến: {{ref}}",
|
|
"merge.incomingRebase": "Bên đến (commit đang được áp lại): {{ref}}",
|
|
"merge.incomingPlain": "Bên đến",
|
|
"merge.current": "Hiện tại: {{branch}}",
|
|
"merge.currentRebase": "Hiện tại (nhánh bạn đang rebase lên)",
|
|
"merge.base": "Bản gốc chung",
|
|
"merge.result": "Kết quả",
|
|
"merge.sideGone": "Bên này đã xoá file",
|
|
"merge.blockOf": "Conflict {{n}}/{{total}}",
|
|
"merge.acceptCurrent": "Lấy bản hiện tại",
|
|
"merge.acceptIncoming": "Lấy bản đến",
|
|
"merge.bothCurrentFirst": "Lấy cả hai (hiện tại trước)",
|
|
"merge.bothIncomingFirst": "Lấy cả hai (bản đến trước)",
|
|
"merge.editBlock": "Sửa",
|
|
"merge.editDone": "Xong",
|
|
"merge.undoChoice": "Bỏ chọn",
|
|
"merge.left_other": "Còn {{count}}/{{total}} conflict",
|
|
"merge.allChosen": "Đã chọn xong mọi conflict",
|
|
"merge.wholeMode": "Đang sửa toàn bộ kết quả",
|
|
"merge.prev": "Conflict trước",
|
|
"merge.next": "Conflict sau",
|
|
"merge.showBase": "Xem bản gốc",
|
|
"merge.editWhole": "Sửa cả file kết quả",
|
|
"merge.backToBlocks": "Quay lại từng conflict",
|
|
"merge.save": "Lưu kết quả",
|
|
"merge.saved": "Đã giải quyết {{path}}",
|
|
"merge.markersLeft": "Kết quả vẫn còn dấu conflict (<<<<<<< ======= >>>>>>>): hãy xử lý hết các khối trước.",
|
|
"merge.stale": "File đã thay đổi trên đĩa từ lúc mở. Hãy đóng và mở lại.",
|
|
"merge.binary": "Đây là file nhị phân: hãy chọn nguyên một bên ở màn hình conflict.",
|
|
"merge.tooBig": "File quá lớn cho trình gộp: hãy chọn nguyên một bên hoặc sửa trong terminal.",
|
|
"merge.noWorking": "Một bên đã xoá file này: hãy giữ hoặc xoá bằng Giữ của mình / Lấy bản kia.",
|
|
"merge.unbalanced": "Dấu conflict trong file bị lệch: hãy sửa tay.",
|
|
|
|
"reflog.title": "Reflog",
|
|
"reflog.of": "Các vị trí nhánh từng trỏ tới:",
|
|
"reflog.hint": "Mọi chỗ HEAD hoặc nhánh từng trỏ tới, mới nhất ở trên. Commit bị mất do reset hay rebase vẫn còn ở đây: bấm Reset về đây để lấy lại.",
|
|
"reflog.empty": "Chưa có gì được ghi lại.",
|
|
"reflog.resetHere": "Reset về đây…",
|
|
"reflog.more": "Xem thêm",
|
|
|
|
"rebase.title": "Rebase {{branch}} lên…",
|
|
"rebase.onto": "Nhánh để rebase lên",
|
|
"rebase.pick": "Chọn nhánh",
|
|
"rebase.explain": "Các commit riêng của nhánh bạn sẽ được áp lại lần lượt lên trên nhánh bạn chọn. Nếu một commit bị conflict, rebase dừng lại và bảng Thay đổi sẽ có Tiếp tục, Bỏ qua và Huỷ.",
|
|
"rebase.nothing": "Không có gì để áp lại: nhánh này không có commit nào mà {{onto}} chưa có.",
|
|
"rebase.summary_other": "{{count}} commit sẽ được áp lại lên {{onto}} (bên đó có {{behind}} commit mới).",
|
|
"rebase.run": "Rebase",
|
|
"rebase.done": "Đã rebase lên {{onto}}",
|
|
"rebase.stopped_other": "Rebase đã dừng: {{count}} file bị conflict. Xử lý xong rồi bấm Tiếp tục.",
|
|
|
|
"rebaseBanner.skip": "Bỏ qua commit",
|
|
"rebaseBanner.skipHint": "Bỏ commit mà rebase đang dừng và làm tiếp commit sau",
|
|
"rebaseBanner.finished": "Đã rebase xong",
|
|
|
|
"interactive.title": "Sửa commit",
|
|
"interactive.explain": "Đổi thứ tự bằng các mũi tên và chọn cho từng commit: giữ nguyên, sửa nội dung message, gộp (squash hoặc fixup) vào commit phía trên, hoặc bỏ đi. Chưa có gì thay đổi cho tới khi bạn bấm Viết lại.",
|
|
"interactive.merges": "Khoảng này có merge commit, hãy viết lại trong terminal.",
|
|
"interactive.nothing": "Không có commit chưa push nào để sửa.",
|
|
"interactive.action": "Làm gì với {{short}}",
|
|
"interactive.actions.pick": "Giữ",
|
|
"interactive.actions.reword": "Sửa message",
|
|
"interactive.actions.squash": "Gộp vào commit trên",
|
|
"interactive.actions.fixup": "Gộp vào commit trên (bỏ message)",
|
|
"interactive.actions.drop": "Bỏ",
|
|
"interactive.up": "Lên trên",
|
|
"interactive.down": "Xuống dưới",
|
|
"interactive.message": "Message của commit",
|
|
"interactive.squashHint": "Để trống thì ghép cả hai message",
|
|
"interactive.problem.first": "Commit đầu tiên được giữ không gộp được: phía trên nó không có gì.",
|
|
"interactive.problem.allDropped": "Mọi commit đều bị bỏ: hãy dùng Reset nhánh về commit này.",
|
|
"interactive.problem.reword": "Commit sửa message thì cần có message.",
|
|
"interactive.run": "Viết lại",
|
|
"interactive.runConfirm": "Bấm lần nữa để viết lại",
|
|
"interactive.done": "Đã viết lại các commit",
|
|
|
|
"reset.title": "Reset {{branch}} về {{short}}",
|
|
"reset.summary": "{{dropped}} commit rời khỏi {{branch}} và {{added}} commit được thêm vào.",
|
|
"reset.already": "Nhánh đang ở đúng commit này rồi.",
|
|
"reset.unrelated": "Commit này không nằm trên lịch sử của nhánh nên không reset về được ở đây.",
|
|
"reset.mode": "File của bạn sẽ ra sao",
|
|
"reset.modes.soft": "Soft",
|
|
"reset.modes.mixed": "Mixed",
|
|
"reset.modes.keep": "Keep",
|
|
"reset.modes.hard": "Hard",
|
|
"reset.modesHelp.soft": "Chỉ nhánh di chuyển; thay đổi của các commit bị bỏ vẫn nằm trong vùng stage.",
|
|
"reset.modesHelp.mixed": "Nhánh di chuyển; các thay đổi đó vẫn còn trong file, chưa stage.",
|
|
"reset.modesHelp.keep": "File đổi theo commit, nhưng git sẽ từ chối nếu việc đó ghi đè lên thay đổi chưa commit.",
|
|
"reset.modesHelp.hard": "File đổi đúng y như commit. Chỉ chạy khi không có thay đổi chưa commit, nên không mất gì.",
|
|
"reset.hardDirty": "Hard reset chỉ chạy khi không có thay đổi chưa commit. Hãy dùng Keep, hoặc commit/bỏ thay đổi trước.",
|
|
"reset.typeBranch": "Gõ tên nhánh ({{branch}}) để xác nhận",
|
|
"reset.pushed_other": "{{count}} commit rời khỏi nhánh đã được push, nên sẽ phải force-push.",
|
|
"reset.run": "Reset ({{mode}})",
|
|
"reset.done": "Đã reset nhánh về {{short}}",
|
|
|
|
"forcePush.title": "Force push (with lease)",
|
|
"forcePush.where": "Push {{branch}} lên {{remote}}/{{remoteBranch}}, thay thế những gì đang có ở đó.",
|
|
"forcePush.replaces": "Sẽ thay {{sha}} trên remote (nhánh của bạn đi trước {{ahead}}, đi sau {{behind}} commit).",
|
|
"forcePush.newBranch": "Remote chưa có nhánh này.",
|
|
"forcePush.dropsRemote_other": "{{count}} commit trên remote không có trong nhánh của bạn và sẽ biến mất khỏi đó.",
|
|
"forcePush.protected": "Đây là nhánh được bảo vệ (main, master, develop…): server này tắt force-push cho nhánh đó.",
|
|
"forcePush.lease": "With lease: push bị từ chối nếu có ai đã push lên nhánh remote kể từ lần fetch gần nhất của bạn.",
|
|
"forcePush.run": "Force push",
|
|
"forcePush.runConfirm": "Bấm lần nữa để force push",
|
|
"forcePush.done": "Đã force push lên {{remote}}/{{branch}}",
|
|
"forcePush.stale": "Nhánh remote đã thay đổi từ lần fetch gần nhất. Hãy fetch, xem trên đó có gì rồi thử lại.",
|
|
|
|
"remotes.title": "Remote",
|
|
"remotes.none": "Repo này chưa có remote.",
|
|
"remotes.default": "Nhánh mặc định: {{branch}}",
|
|
"remotes.rename": "Đổi tên",
|
|
"remotes.newName": "Tên mới",
|
|
"remotes.remove": "Gỡ",
|
|
"remotes.removeConfirm": "Bấm lần nữa để gỡ",
|
|
"remotes.branches_other": "{{count}} nhánh",
|
|
"remotes.deleteBranch": "Xoá trên remote",
|
|
"remotes.deleteBranchConfirm": "Bấm lần nữa để xoá",
|
|
"remotes.branchLocked": "Không xoá được nhánh mặc định và main/master/develop ở đây",
|
|
"remotes.add": "Thêm remote",
|
|
"remotes.name": "Tên",
|
|
"remotes.url": "URL",
|
|
"remotes.urlHint": "https:// (không kèm thông tin đăng nhập), ssh:// hoặc user@host:path.",
|
|
"remotes.addButton": "Thêm",
|
|
"remotes.added": "Đã thêm remote {{name}}",
|
|
"remotes.renamed": "Đã đổi tên remote {{from}} thành {{to}}",
|
|
"remotes.removed": "Đã gỡ remote {{name}}",
|
|
"remotes.branchDeleted": "Đã xoá {{ref}} trên remote"
|
|
}
|