[{"data":1,"prerenderedAt":1022},["ShallowReactive",2],{"doc-page:\u002Fdocs\u002Fgit-advanced":3},{"doc":4,"prev":983,"next":990,"resolvedType":8,"readingMinutes":134,"audience":994,"checklist":998,"related":1002},{"path":5,"title":6,"description":7,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13,"body":14},"\u002Fdocs\u002Fgit-advanced","Git 进阶技巧","Git Worktree、子模块、Cherry-pick、Bisect、Reflog 等高级用法","article",null,"dev-environment","开发环境","2026-02-27","i-carbon-code",{"type":15,"value":16,"toc":962},"minimark",[17,21,31,34,38,87,91,94,200,205,208,211,300,303,307,310,385,391,395,398,468,474,478,481,584,587,591,594,617,620,652,655,658,754,757,760,836,839,859,862,865,889,892,895,902,909,915,918,921,924,927,958],[18,19,6],"h1",{"id":20},"git-进阶技巧",[22,23,24,25,30],"p",{},"基础用法见 ",[26,27,29],"a",{"href":28},"\u002Fdocs\u002Fgit-setup","Git 安装与配置","，本文介绍进阶操作。",[22,32,33],{},"这些技巧不需要一次性全掌握。更好的方式是：先知道“遇到什么问题，该想到哪类 Git 能力”，等实际碰到场景时再用。",[35,36,37],"h2",{"id":37},"先按问题找工具",[39,40,41,53,61,69,78],"ul",{},[42,43,44,48,49],"li",{},[45,46,47],"strong",{},"同时并行改多个分支","：用 ",[50,51,52],"code",{},"worktree",[42,54,55,48,58],{},[45,56,57],{},"只摘一个提交过来",[50,59,60],{},"cherry-pick",[42,62,63,48,66],{},[45,64,65],{},"不知道哪次提交引入了 bug",[50,67,68],{},"bisect",[42,70,71,74,75],{},[45,72,73],{},"误操作后想回到之前状态","：先看 ",[50,76,77],{},"reflog",[42,79,80,83,84],{},[45,81,82],{},"想整理提交历史","：用交互式 ",[50,85,86],{},"rebase",[35,88,90],{"id":89},"worktree工作树","Worktree（工作树）",[22,92,93],{},"同时在多个分支上工作，无需 stash 或切换：",[95,96,101],"pre",{"className":97,"code":98,"language":99,"meta":100,"style":100},"language-bash shiki shiki-themes github-light github-dark","# 创建工作树\ngit worktree add ..\u002Ffeature-branch feature\u002Fxxx\n\n# 查看所有工作树\ngit worktree list\n\n# 删除工作树\ngit worktree remove ..\u002Ffeature-branch\n\n# 清理已删除的工作树引用\ngit worktree prune\n","bash","",[50,102,103,112,132,139,145,155,160,166,179,184,190],{"__ignoreMap":100},[104,105,108],"span",{"class":106,"line":107},"line",1,[104,109,111],{"class":110},"sJ8bj","# 创建工作树\n",[104,113,115,119,123,126,129],{"class":106,"line":114},2,[104,116,118],{"class":117},"sScJk","git",[104,120,122],{"class":121},"sZZnC"," worktree",[104,124,125],{"class":121}," add",[104,127,128],{"class":121}," ..\u002Ffeature-branch",[104,130,131],{"class":121}," feature\u002Fxxx\n",[104,133,135],{"class":106,"line":134},3,[104,136,138],{"emptyLinePlaceholder":137},true,"\n",[104,140,142],{"class":106,"line":141},4,[104,143,144],{"class":110},"# 查看所有工作树\n",[104,146,148,150,152],{"class":106,"line":147},5,[104,149,118],{"class":117},[104,151,122],{"class":121},[104,153,154],{"class":121}," list\n",[104,156,158],{"class":106,"line":157},6,[104,159,138],{"emptyLinePlaceholder":137},[104,161,163],{"class":106,"line":162},7,[104,164,165],{"class":110},"# 删除工作树\n",[104,167,169,171,173,176],{"class":106,"line":168},8,[104,170,118],{"class":117},[104,172,122],{"class":121},[104,174,175],{"class":121}," remove",[104,177,178],{"class":121}," ..\u002Ffeature-branch\n",[104,180,182],{"class":106,"line":181},9,[104,183,138],{"emptyLinePlaceholder":137},[104,185,187],{"class":106,"line":186},10,[104,188,189],{"class":110},"# 清理已删除的工作树引用\n",[104,191,193,195,197],{"class":106,"line":192},11,[104,194,118],{"class":117},[104,196,122],{"class":121},[104,198,199],{"class":121}," prune\n",[22,201,202,204],{},[50,203,52],{}," 非常适合代码评审、热修复和多分支并行开发，比频繁 stash \u002F checkout 更干净。",[35,206,207],{"id":60},"Cherry-pick",[22,209,210],{},"将其他分支的某个提交应用到当前分支：",[95,212,214],{"className":97,"code":213,"language":99,"meta":100,"style":100},"# 应用单个提交\ngit cherry-pick \u003Ccommit-hash>\n\n# 应用多个提交\ngit cherry-pick \u003Chash1> \u003Chash2>\n\n# 应用但不自动提交\ngit cherry-pick --no-commit \u003Chash>\n",[50,215,216,221,242,246,251,272,276,281],{"__ignoreMap":100},[104,217,218],{"class":106,"line":107},[104,219,220],{"class":110},"# 应用单个提交\n",[104,222,223,225,228,232,235,239],{"class":106,"line":114},[104,224,118],{"class":117},[104,226,227],{"class":121}," cherry-pick",[104,229,231],{"class":230},"szBVR"," \u003C",[104,233,234],{"class":121},"commit-has",[104,236,238],{"class":237},"sVt8B","h",[104,240,241],{"class":230},">\n",[104,243,244],{"class":106,"line":134},[104,245,138],{"emptyLinePlaceholder":137},[104,247,248],{"class":106,"line":141},[104,249,250],{"class":110},"# 应用多个提交\n",[104,252,253,255,257,259,262,265,267,269],{"class":106,"line":147},[104,254,118],{"class":117},[104,256,227],{"class":121},[104,258,231],{"class":230},[104,260,261],{"class":121},"hash",[104,263,264],{"class":230},"1>",[104,266,231],{"class":230},[104,268,261],{"class":121},[104,270,271],{"class":230},"2>\n",[104,273,274],{"class":106,"line":157},[104,275,138],{"emptyLinePlaceholder":137},[104,277,278],{"class":106,"line":162},[104,279,280],{"class":110},"# 应用但不自动提交\n",[104,282,283,285,287,291,293,296,298],{"class":106,"line":168},[104,284,118],{"class":117},[104,286,227],{"class":121},[104,288,290],{"class":289},"sj4cs"," --no-commit",[104,292,231],{"class":230},[104,294,295],{"class":121},"has",[104,297,238],{"class":237},[104,299,241],{"class":230},[22,301,302],{},"适合热修复同步、从实验分支摘取单点改动，但不适合拿来长期替代正常分支合并。",[35,304,306],{"id":305},"bisect二分查找","Bisect（二分查找）",[22,308,309],{},"快速定位引入 bug 的提交：",[95,311,313],{"className":97,"code":312,"language":99,"meta":100,"style":100},"git bisect start\ngit bisect bad                  # 当前版本有 bug\ngit bisect good v1.0            # 这个版本没有 bug\n# Git 会自动切换到中间提交，测试后标记：\ngit bisect good                 # 或 git bisect bad\n# 重复直到找到问题提交\ngit bisect reset                # 结束\n",[50,314,315,325,337,352,357,368,373],{"__ignoreMap":100},[104,316,317,319,322],{"class":106,"line":107},[104,318,118],{"class":117},[104,320,321],{"class":121}," bisect",[104,323,324],{"class":121}," start\n",[104,326,327,329,331,334],{"class":106,"line":114},[104,328,118],{"class":117},[104,330,321],{"class":121},[104,332,333],{"class":121}," bad",[104,335,336],{"class":110},"                  # 当前版本有 bug\n",[104,338,339,341,343,346,349],{"class":106,"line":134},[104,340,118],{"class":117},[104,342,321],{"class":121},[104,344,345],{"class":121}," good",[104,347,348],{"class":121}," v1.0",[104,350,351],{"class":110},"            # 这个版本没有 bug\n",[104,353,354],{"class":106,"line":141},[104,355,356],{"class":110},"# Git 会自动切换到中间提交，测试后标记：\n",[104,358,359,361,363,365],{"class":106,"line":147},[104,360,118],{"class":117},[104,362,321],{"class":121},[104,364,345],{"class":121},[104,366,367],{"class":110},"                 # 或 git bisect bad\n",[104,369,370],{"class":106,"line":157},[104,371,372],{"class":110},"# 重复直到找到问题提交\n",[104,374,375,377,379,382],{"class":106,"line":162},[104,376,118],{"class":117},[104,378,321],{"class":121},[104,380,381],{"class":121}," reset",[104,383,384],{"class":110},"                # 结束\n",[22,386,387,388,390],{},"如果你的项目有自动化测试，",[50,389,68],{}," 的威力会非常大，因为可以把“人工一点点猜”变成“半自动定位”。",[35,392,394],{"id":393},"reflog引用日志","Reflog（引用日志）",[22,396,397],{},"恢复误删的提交或分支：",[95,399,401],{"className":97,"code":400,"language":99,"meta":100,"style":100},"# 查看所有操作历史\ngit reflog\n\n# 恢复到某个状态\ngit reset --hard HEAD@{3}\n\n# 恢复误删的分支\ngit branch recovered-branch HEAD@{5}\n",[50,402,403,408,415,419,424,442,446,451],{"__ignoreMap":100},[104,404,405],{"class":106,"line":107},[104,406,407],{"class":110},"# 查看所有操作历史\n",[104,409,410,412],{"class":106,"line":114},[104,411,118],{"class":117},[104,413,414],{"class":121}," reflog\n",[104,416,417],{"class":106,"line":134},[104,418,138],{"emptyLinePlaceholder":137},[104,420,421],{"class":106,"line":141},[104,422,423],{"class":110},"# 恢复到某个状态\n",[104,425,426,428,430,433,436,439],{"class":106,"line":147},[104,427,118],{"class":117},[104,429,381],{"class":121},[104,431,432],{"class":289}," --hard",[104,434,435],{"class":121}," HEAD@{",[104,437,438],{"class":289},"3",[104,440,441],{"class":121},"}\n",[104,443,444],{"class":106,"line":157},[104,445,138],{"emptyLinePlaceholder":137},[104,447,448],{"class":106,"line":162},[104,449,450],{"class":110},"# 恢复误删的分支\n",[104,452,453,455,458,461,463,466],{"class":106,"line":168},[104,454,118],{"class":117},[104,456,457],{"class":121}," branch",[104,459,460],{"class":121}," recovered-branch",[104,462,435],{"class":121},[104,464,465],{"class":289},"5",[104,467,441],{"class":121},[22,469,470,471,473],{},"很多“我把分支搞没了”的场景，第一反应都应该先看 ",[50,472,77],{},"，而不是慌着重写。",[35,475,477],{"id":476},"子模块submodule","子模块（Submodule）",[22,479,480],{},"在项目中引用其他 Git 仓库：",[95,482,484],{"className":97,"code":483,"language":99,"meta":100,"style":100},"# 添加子模块\ngit submodule add https:\u002F\u002Fgithub.com\u002Fuser\u002Frepo.git libs\u002Frepo\n\n# 克隆含子模块的项目\ngit clone --recurse-submodules \u003Curl>\n\n# 更新子模块\ngit submodule update --remote\n\n# 初始化子模块（克隆后忘记 --recurse）\ngit submodule init\ngit submodule update\n",[50,485,486,491,506,510,515,535,539,544,556,560,565,574],{"__ignoreMap":100},[104,487,488],{"class":106,"line":107},[104,489,490],{"class":110},"# 添加子模块\n",[104,492,493,495,498,500,503],{"class":106,"line":114},[104,494,118],{"class":117},[104,496,497],{"class":121}," submodule",[104,499,125],{"class":121},[104,501,502],{"class":121}," https:\u002F\u002Fgithub.com\u002Fuser\u002Frepo.git",[104,504,505],{"class":121}," libs\u002Frepo\n",[104,507,508],{"class":106,"line":134},[104,509,138],{"emptyLinePlaceholder":137},[104,511,512],{"class":106,"line":141},[104,513,514],{"class":110},"# 克隆含子模块的项目\n",[104,516,517,519,522,525,527,530,533],{"class":106,"line":147},[104,518,118],{"class":117},[104,520,521],{"class":121}," clone",[104,523,524],{"class":289}," --recurse-submodules",[104,526,231],{"class":230},[104,528,529],{"class":121},"ur",[104,531,532],{"class":237},"l",[104,534,241],{"class":230},[104,536,537],{"class":106,"line":157},[104,538,138],{"emptyLinePlaceholder":137},[104,540,541],{"class":106,"line":162},[104,542,543],{"class":110},"# 更新子模块\n",[104,545,546,548,550,553],{"class":106,"line":168},[104,547,118],{"class":117},[104,549,497],{"class":121},[104,551,552],{"class":121}," update",[104,554,555],{"class":289}," --remote\n",[104,557,558],{"class":106,"line":181},[104,559,138],{"emptyLinePlaceholder":137},[104,561,562],{"class":106,"line":186},[104,563,564],{"class":110},"# 初始化子模块（克隆后忘记 --recurse）\n",[104,566,567,569,571],{"class":106,"line":192},[104,568,118],{"class":117},[104,570,497],{"class":121},[104,572,573],{"class":121}," init\n",[104,575,577,579,581],{"class":106,"line":576},12,[104,578,118],{"class":117},[104,580,497],{"class":121},[104,582,583],{"class":121}," update\n",[22,585,586],{},"子模块功能强，但团队协作成本也高。只有在“必须保留独立仓库边界”时才建议用；否则很多场景更适合 monorepo 或包管理方案。",[35,588,590],{"id":589},"交互式-rebase","交互式 Rebase",[22,592,593],{},"整理提交历史：",[95,595,597],{"className":97,"code":596,"language":99,"meta":100,"style":100},"# 修改最近 5 次提交\ngit rebase -i HEAD~5\n",[50,598,599,604],{"__ignoreMap":100},[104,600,601],{"class":106,"line":107},[104,602,603],{"class":110},"# 修改最近 5 次提交\n",[104,605,606,608,611,614],{"class":106,"line":114},[104,607,118],{"class":117},[104,609,610],{"class":121}," rebase",[104,612,613],{"class":289}," -i",[104,615,616],{"class":121}," HEAD~5\n",[22,618,619],{},"常用操作：",[39,621,622,628,634,640,646],{},[42,623,624,627],{},[50,625,626],{},"pick"," — 保留提交",[42,629,630,633],{},[50,631,632],{},"squash"," — 合并到上一个提交",[42,635,636,639],{},[50,637,638],{},"reword"," — 修改提交信息",[42,641,642,645],{},[50,643,644],{},"drop"," — 删除提交",[42,647,648,651],{},[50,649,650],{},"edit"," — 暂停以修改内容",[22,653,654],{},"使用前要注意：如果这些提交已经推到共享分支，重写历史会影响其他协作者。",[35,656,657],{"id":657},"高级日志",[95,659,661],{"className":97,"code":660,"language":99,"meta":100,"style":100},"# 搜索提交内容\ngit log -S \"function_name\" --oneline\n\n# 查看某文件的修改历史\ngit log --follow -p -- path\u002Fto\u002Ffile\n\n# 查看某行的修改历史\ngit log -L 10,20:src\u002Fmain.ts\n\n# 统计每人提交数\ngit shortlog -sn --no-merges\n",[50,662,663,668,684,688,693,711,715,720,732,736,741],{"__ignoreMap":100},[104,664,665],{"class":106,"line":107},[104,666,667],{"class":110},"# 搜索提交内容\n",[104,669,670,672,675,678,681],{"class":106,"line":114},[104,671,118],{"class":117},[104,673,674],{"class":121}," log",[104,676,677],{"class":289}," -S",[104,679,680],{"class":121}," \"function_name\"",[104,682,683],{"class":289}," --oneline\n",[104,685,686],{"class":106,"line":134},[104,687,138],{"emptyLinePlaceholder":137},[104,689,690],{"class":106,"line":141},[104,691,692],{"class":110},"# 查看某文件的修改历史\n",[104,694,695,697,699,702,705,708],{"class":106,"line":147},[104,696,118],{"class":117},[104,698,674],{"class":121},[104,700,701],{"class":289}," --follow",[104,703,704],{"class":289}," -p",[104,706,707],{"class":289}," --",[104,709,710],{"class":121}," path\u002Fto\u002Ffile\n",[104,712,713],{"class":106,"line":157},[104,714,138],{"emptyLinePlaceholder":137},[104,716,717],{"class":106,"line":162},[104,718,719],{"class":110},"# 查看某行的修改历史\n",[104,721,722,724,726,729],{"class":106,"line":168},[104,723,118],{"class":117},[104,725,674],{"class":121},[104,727,728],{"class":289}," -L",[104,730,731],{"class":121}," 10,20:src\u002Fmain.ts\n",[104,733,734],{"class":106,"line":181},[104,735,138],{"emptyLinePlaceholder":137},[104,737,738],{"class":106,"line":186},[104,739,740],{"class":110},"# 统计每人提交数\n",[104,742,743,745,748,751],{"class":106,"line":192},[104,744,118],{"class":117},[104,746,747],{"class":121}," shortlog",[104,749,750],{"class":289}," -sn",[104,752,753],{"class":289}," --no-merges\n",[22,755,756],{},"这些日志命令非常适合排查“谁改过这里”“这个函数何时变的”“某一行是谁引入的”。",[35,758,759],{"id":759},"清理与维护",[95,761,763],{"className":97,"code":762,"language":99,"meta":100,"style":100},"# 清理未跟踪文件\ngit clean -fd\n\n# 预览将被清理的文件\ngit clean -fdn\n\n# 压缩仓库\ngit gc --aggressive\n\n# 查看仓库大小\ngit count-objects -vH\n",[50,764,765,770,780,784,789,798,802,807,817,821,826],{"__ignoreMap":100},[104,766,767],{"class":106,"line":107},[104,768,769],{"class":110},"# 清理未跟踪文件\n",[104,771,772,774,777],{"class":106,"line":114},[104,773,118],{"class":117},[104,775,776],{"class":121}," clean",[104,778,779],{"class":289}," -fd\n",[104,781,782],{"class":106,"line":134},[104,783,138],{"emptyLinePlaceholder":137},[104,785,786],{"class":106,"line":141},[104,787,788],{"class":110},"# 预览将被清理的文件\n",[104,790,791,793,795],{"class":106,"line":147},[104,792,118],{"class":117},[104,794,776],{"class":121},[104,796,797],{"class":289}," -fdn\n",[104,799,800],{"class":106,"line":157},[104,801,138],{"emptyLinePlaceholder":137},[104,803,804],{"class":106,"line":162},[104,805,806],{"class":110},"# 压缩仓库\n",[104,808,809,811,814],{"class":106,"line":168},[104,810,118],{"class":117},[104,812,813],{"class":121}," gc",[104,815,816],{"class":289}," --aggressive\n",[104,818,819],{"class":106,"line":181},[104,820,138],{"emptyLinePlaceholder":137},[104,822,823],{"class":106,"line":186},[104,824,825],{"class":110},"# 查看仓库大小\n",[104,827,828,830,833],{"class":106,"line":192},[104,829,118],{"class":117},[104,831,832],{"class":121}," count-objects",[104,834,835],{"class":289}," -vH\n",[35,837,838],{"id":838},"高风险操作提醒",[39,840,841,846,851,856],{},[42,842,843],{},[50,844,845],{},"reset --hard",[42,847,848],{},[50,849,850],{},"clean -fd",[42,852,853,854],{},"已推送提交上的 ",[50,855,86],{},[42,857,858],{},"对不熟悉的子模块仓库直接批量更新",[22,860,861],{},"这些操作不是不能用，而是执行前最好先确认是否还有别人依赖当前状态。",[35,863,864],{"id":864},"推荐学习顺序",[866,867,868,872,876,880,885],"ol",{},[42,869,870],{},[50,871,77],{},[42,873,874],{},[50,875,52],{},[42,877,878],{},[50,879,60],{},[42,881,882],{},[50,883,884],{},"rebase -i",[42,886,887],{},[50,888,68],{},[22,890,891],{},"这样会比从最复杂的历史重写开始更稳。",[35,893,894],{"id":894},"常见问题",[896,897,899,901],"h3",{"id":898},"rebase-后提交没了",[50,900,86],{}," 后提交没了",[22,903,904,905,908],{},"先别慌，优先看 ",[50,906,907],{},"git reflog","。大多数“丢了”的提交其实还在，只是引用变了。",[896,910,912,914],{"id":911},"cherry-pick-冲突很多",[50,913,60],{}," 冲突很多",[22,916,917],{},"通常说明这次改动并不适合被当成“单点摘取”。这时重新合并分支，或者把改动拆小，往往更省时间。",[896,919,920],{"id":920},"子模块总是状态混乱",[22,922,923],{},"如果团队里不止你一个人维护仓库，优先重新评估是不是非用子模块不可。很多混乱不是使用姿势问题，而是方案本身不适合团队。",[35,925,926],{"id":926},"参考链接",[39,928,929,938,946,953],{},[42,930,931,937],{},[26,932,936],{"href":933,"rel":934},"https:\u002F\u002Fgit-scm.com\u002Fbook\u002Fzh\u002Fv2",[935],"nofollow","Pro Git 中文版"," — 免费电子书",[42,939,940,945],{},[26,941,944],{"href":942,"rel":943},"https:\u002F\u002Fgit-scm.com\u002Fdocs\u002Fgit-worktree",[935],"Git Worktree 文档"," — 官方文档",[42,947,948,945],{},[26,949,952],{"href":950,"rel":951},"https:\u002F\u002Fgit-scm.com\u002Fdocs\u002Fgit-bisect",[935],"Git Bisect 文档",[42,954,955,957],{},[26,956,29],{"href":28}," — 如果你还没把基础别名、用户信息和 SSH 配好",[959,960,961],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":100,"searchDepth":114,"depth":114,"links":963},[964,965,966,967,968,969,970,971,972,973,974,975,982],{"id":37,"depth":114,"text":37},{"id":89,"depth":114,"text":90},{"id":60,"depth":114,"text":207},{"id":305,"depth":114,"text":306},{"id":393,"depth":114,"text":394},{"id":476,"depth":114,"text":477},{"id":589,"depth":114,"text":590},{"id":657,"depth":114,"text":657},{"id":759,"depth":114,"text":759},{"id":838,"depth":114,"text":838},{"id":864,"depth":114,"text":864},{"id":894,"depth":114,"text":894,"children":976},[977,979,981],{"id":898,"depth":134,"text":978},"rebase 后提交没了",{"id":911,"depth":134,"text":980},"cherry-pick 冲突很多",{"id":920,"depth":134,"text":920},{"id":926,"depth":114,"text":926},{"path":984,"title":985,"description":986,"docType":8,"resourceKind":9,"categoryId":987,"categoryLabel":988,"updatedAt":12,"publishedAt":12,"icon":989},"\u002Fdocs\u002Fffmpeg-guide","FFmpeg 完整指南","FFmpeg 安装、常用命令、视频转码、音频处理、字幕合并与批量操作","media-creation","媒体与创作","i-carbon-media-library",{"path":991,"title":992,"description":993,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},"\u002Fdocs\u002Fgithub-tips","GitHub 使用技巧","GitHub 搜索语法、快捷键、Profile README、Gist 与实用功能",[995,996,997],"希望把零散经验整理成长期可复用工作流的人","正在搭建开发环境、统一工具链或排查构建问题的开发者","希望阅读时顺手建立自己的操作清单或收藏体系的人",[999,1000,1001],"先浏览标题、摘要和目录，带着问题阅读会更高效","确认本机 Node、包管理器、终端和仓库依赖版本是否一致","如果页面里提到相关文档，尽量一起打开对照，效果通常更完整",[1003,1008,1013,1018],{"path":1004,"title":1005,"description":1006,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":1007,"publishedAt":1007,"icon":13},"\u002Fdocs\u002Flocal-setup","本地运行与部署","使用 bun 安装、开发、构建与预览 DomiVault 的完整本地流程与排障指引","2026-03-10",{"path":1009,"title":1010,"description":1011,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":1012,"publishedAt":1012,"icon":13},"\u002Fdocs\u002Fvolta-guide","Volta Node 版本管理","使用 Volta 管理 Node.js、npm、pnpm 和 Yarn，并在项目中固定 JavaScript 工具链版本","2026-03-08",{"path":1014,"title":1015,"description":1016,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":1017,"publishedAt":1017,"icon":13},"\u002Fdocs\u002Fpnpm-monorepo","pnpm 与 Monorepo","pnpm 使用技巧、workspace 配置、Monorepo 项目管理与 Turborepo","2026-02-28",{"path":1019,"title":1020,"description":1021,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},"\u002Fdocs\u002Fenv-variables","环境变量管理","dotenv 配置、各平台环境变量设置、.env 文件规范与安全实践",1776215712970]