[{"data":1,"prerenderedAt":1560},["ShallowReactive",2],{"post:\u002Fposts\u002F2021\u002Fgit":3,"posts:catalog":1288},{"id":4,"title":5,"aiSummary":6,"audio":7,"body":8,"categories":1269,"cover":1271,"description":1272,"extension":1273,"meta":1274,"navigation":6,"path":1275,"pin":1276,"publish":1277,"seo":1278,"series":7,"seriesOrder":7,"stem":1279,"summary":7,"summarySource":1280,"tags":1281,"theme":1283,"update":1284,"wip":1285,"wordCount":1286,"__hash__":1287},"posts\u002Fposts\u002F2021\u002Fgit.md","Git 笔记",true,null,{"type":9,"value":10,"toc":1245},"minimark",[11,16,28,51,55,59,62,98,105,132,139,178,181,260,267,271,274,295,298,319,323,326,334,357,364,368,371,539,556,559,649,652,753,767,771,774,782,788,791,794,893,897,904,973,991,1007,1010,1014,1047,1051,1054,1068,1079,1097,1100,1104,1107,1123,1136,1152,1156,1162,1179,1185,1189,1192,1207,1213,1217,1241],[12,13,15],"h2",{"id":14},"git-安装","Git 安装",[17,18,19,20,27],"p",{},"前往 ",[21,22,26],"a",{"href":23,"rel":24},"https:\u002F\u002Fgit-scm.com\u002Fdownloads",[25],"nofollow","Git 官网"," 下载对应系统的安装包。安装完成后，可以在终端确认版本：",[29,30,35],"pre",{"className":31,"code":32,"language":33,"meta":34,"style":34},"language-bash shiki shiki-themes catppuccin-mocha catppuccin-latte","git --version\n","bash","",[36,37,38],"code",{"__ignoreMap":34},[39,40,43,47],"span",{"class":41,"line":42},"line",1,[39,44,46],{"class":45},"s3Fsb","git",[39,48,50],{"class":49},"ssZzq"," --version\n",[12,52,54],{"id":53},"git-基础配置","Git 基础配置",[56,57,58],"h3",{"id":58},"配置用户名和邮箱",[17,60,61],{},"Git 会把用户名和邮箱写入提交记录。通常只需要配置一次全局信息：",[29,63,65],{"className":31,"code":64,"language":33,"meta":34,"style":34},"git config --global user.name \"你的用户名\"\ngit config --global user.email \"you@example.com\"\n",[36,66,67,83],{"__ignoreMap":34},[39,68,69,71,74,77,80],{"class":41,"line":42},[39,70,46],{"class":45},[39,72,73],{"class":49}," config",[39,75,76],{"class":49}," --global",[39,78,79],{"class":49}," user.name",[39,81,82],{"class":49}," \"你的用户名\"\n",[39,84,86,88,90,92,95],{"class":41,"line":85},2,[39,87,46],{"class":45},[39,89,73],{"class":49},[39,91,76],{"class":49},[39,93,94],{"class":49}," user.email",[39,96,97],{"class":49}," \"you@example.com\"\n",[17,99,100,101,104],{},"Windows 的全局配置通常保存在 ",[36,102,103],{},"%USERPROFILE%\\.gitconfig","。也可以用命令查看配置及其来源：",[29,106,108],{"className":31,"code":107,"language":33,"meta":34,"style":34},"git config --global --list\ngit config --show-origin --list\n",[36,109,110,121],{"__ignoreMap":34},[39,111,112,114,116,118],{"class":41,"line":42},[39,113,46],{"class":45},[39,115,73],{"class":49},[39,117,76],{"class":49},[39,119,120],{"class":49}," --list\n",[39,122,123,125,127,130],{"class":41,"line":85},[39,124,46],{"class":45},[39,126,73],{"class":49},[39,128,129],{"class":49}," --show-origin",[39,131,120],{"class":49},[17,133,134,135,138],{},"如果某个仓库需要使用不同的身份，在仓库目录中省略 ",[36,136,137],{},"--global"," 即可写入本地配置：",[29,140,142],{"className":31,"code":141,"language":33,"meta":34,"style":34},"git config user.name \"项目专用用户名\"\ngit config user.email \"project@example.com\"\ngit config --local --list\n",[36,143,144,155,166],{"__ignoreMap":34},[39,145,146,148,150,152],{"class":41,"line":42},[39,147,46],{"class":45},[39,149,73],{"class":49},[39,151,79],{"class":49},[39,153,154],{"class":49}," \"项目专用用户名\"\n",[39,156,157,159,161,163],{"class":41,"line":85},[39,158,46],{"class":45},[39,160,73],{"class":49},[39,162,94],{"class":49},[39,164,165],{"class":49}," \"project@example.com\"\n",[39,167,169,171,173,176],{"class":41,"line":168},3,[39,170,46],{"class":45},[39,172,73],{"class":49},[39,174,175],{"class":49}," --local",[39,177,120],{"class":49},[17,179,180],{},"常用配置作用域如下：",[182,183,184,203],"table",{},[185,186,187],"thead",{},[188,189,190,194,197,200],"tr",{},[191,192,193],"th",{},"作用域",[191,195,196],{},"参数",[191,198,199],{},"位置",[191,201,202],{},"用途",[204,205,206,223,241],"tbody",{},[188,207,208,212,217,220],{},[209,210,211],"td",{},"系统",[209,213,214],{},[36,215,216],{},"--system",[209,218,219],{},"Git 的系统配置文件",[209,221,222],{},"当前机器的所有用户",[188,224,225,228,232,238],{},[209,226,227],{},"全局",[209,229,230],{},[36,231,137],{},[209,233,234,235],{},"用户目录下的",[36,236,237],{},".gitconfig",[209,239,240],{},"当前用户的所有仓库",[188,242,243,246,251,257],{},[209,244,245],{},"本地",[209,247,248],{},[36,249,250],{},"--local",[209,252,253,254],{},"仓库的",[36,255,256],{},".git\u002Fconfig",[209,258,259],{},"仅当前仓库",[17,261,262,263,266],{},"同一个配置项重复出现时，优先级为：",[36,264,265],{},"local > global > system","。",[56,268,270],{"id":269},"新建-git-仓库","新建 Git 仓库",[17,272,273],{},"让 Git 管理一个已有项目：",[29,275,277],{"className":31,"code":276,"language":33,"meta":34,"style":34},"cd 项目目录\ngit init\n",[36,278,279,288],{"__ignoreMap":34},[39,280,281,285],{"class":41,"line":42},[39,282,284],{"class":283},"s_l3b","cd",[39,286,287],{"class":49}," 项目目录\n",[39,289,290,292],{"class":41,"line":85},[39,291,46],{"class":45},[39,293,294],{"class":49}," init\n",[17,296,297],{},"创建一个新目录并初始化仓库：",[29,299,301],{"className":31,"code":300,"language":33,"meta":34,"style":34},"git init 项目名\ncd 项目名\n",[36,302,303,313],{"__ignoreMap":34},[39,304,305,307,310],{"class":41,"line":42},[39,306,46],{"class":45},[39,308,309],{"class":49}," init",[39,311,312],{"class":49}," 项目名\n",[39,314,315,317],{"class":41,"line":85},[39,316,284],{"class":283},[39,318,312],{"class":49},[12,320,322],{"id":321},"理解工作区暂存区和提交","理解工作区、暂存区和提交",[17,324,325],{},"Git 的基础工作流可以理解为：",[29,327,332],{"className":328,"code":330,"language":331,"meta":34},[329],"language-text","工作区 --git add--> 暂存区 --git commit--> 本地仓库\n","text",[36,333,330],{"__ignoreMap":34},[335,336,337,345,351],"ul",{},[338,339,340,344],"li",{},[341,342,343],"strong",{},"工作区","：正在编辑的文件。",[338,346,347,350],{},[341,348,349],{},"暂存区","：下一次提交准备包含的内容。",[338,352,353,356],{},[341,354,355],{},"提交","：保存到仓库历史中的一次快照。",[17,358,359,360,363],{},"提交前先用 ",[36,361,362],{},"git status"," 确认哪些改动将被记录，能避免把临时文件或无关修改带入提交。",[12,365,367],{"id":366},"git-操作","Git 操作",[56,369,370],{"id":370},"基础命令",[29,372,374],{"className":31,"code":373,"language":33,"meta":34,"style":34},"git status                         # 查看工作区与暂存区状态\ngit add .                          # 暂存当前目录下的所有改动\ngit add 文件名                     # 暂存指定文件\ngit add 文件夹名\u002F                  # 暂存指定目录中的改动\ngit commit -m \"提交说明\"           # 提交暂存区内容\n\ngit rm 文件名                      # 删除文件并暂存删除操作\ngit rm -r 文件夹名\u002F                # 递归删除目录并暂存删除操作\ngit mv 原文件名 新文件名           # 重命名文件并暂存改动\n\ngit branch                         # 查看本地分支\ngit switch 分支名                  # 切换分支\ngit switch -c 新分支名             # 创建并切换到新分支\n",[36,375,376,387,400,412,425,442,448,461,476,493,498,509,523],{"__ignoreMap":34},[39,377,378,380,383],{"class":41,"line":42},[39,379,46],{"class":45},[39,381,382],{"class":49}," status",[39,384,386],{"class":385},"s0D_2","                         # 查看工作区与暂存区状态\n",[39,388,389,391,394,397],{"class":41,"line":85},[39,390,46],{"class":45},[39,392,393],{"class":49}," add",[39,395,396],{"class":49}," .",[39,398,399],{"class":385},"                          # 暂存当前目录下的所有改动\n",[39,401,402,404,406,409],{"class":41,"line":168},[39,403,46],{"class":45},[39,405,393],{"class":49},[39,407,408],{"class":49}," 文件名",[39,410,411],{"class":385},"                     # 暂存指定文件\n",[39,413,415,417,419,422],{"class":41,"line":414},4,[39,416,46],{"class":45},[39,418,393],{"class":49},[39,420,421],{"class":49}," 文件夹名\u002F",[39,423,424],{"class":385},"                  # 暂存指定目录中的改动\n",[39,426,428,430,433,436,439],{"class":41,"line":427},5,[39,429,46],{"class":45},[39,431,432],{"class":49}," commit",[39,434,435],{"class":49}," -m",[39,437,438],{"class":49}," \"提交说明\"",[39,440,441],{"class":385},"           # 提交暂存区内容\n",[39,443,445],{"class":41,"line":444},6,[39,446,447],{"emptyLinePlaceholder":6},"\n",[39,449,451,453,456,458],{"class":41,"line":450},7,[39,452,46],{"class":45},[39,454,455],{"class":49}," rm",[39,457,408],{"class":49},[39,459,460],{"class":385},"                      # 删除文件并暂存删除操作\n",[39,462,464,466,468,471,473],{"class":41,"line":463},8,[39,465,46],{"class":45},[39,467,455],{"class":49},[39,469,470],{"class":49}," -r",[39,472,421],{"class":49},[39,474,475],{"class":385},"                # 递归删除目录并暂存删除操作\n",[39,477,479,481,484,487,490],{"class":41,"line":478},9,[39,480,46],{"class":45},[39,482,483],{"class":49}," mv",[39,485,486],{"class":49}," 原文件名",[39,488,489],{"class":49}," 新文件名",[39,491,492],{"class":385},"           # 重命名文件并暂存改动\n",[39,494,496],{"class":41,"line":495},10,[39,497,447],{"emptyLinePlaceholder":6},[39,499,501,503,506],{"class":41,"line":500},11,[39,502,46],{"class":45},[39,504,505],{"class":49}," branch",[39,507,508],{"class":385},"                         # 查看本地分支\n",[39,510,512,514,517,520],{"class":41,"line":511},12,[39,513,46],{"class":45},[39,515,516],{"class":49}," switch",[39,518,519],{"class":49}," 分支名",[39,521,522],{"class":385},"                  # 切换分支\n",[39,524,526,528,530,533,536],{"class":41,"line":525},13,[39,527,46],{"class":45},[39,529,516],{"class":49},[39,531,532],{"class":49}," -c",[39,534,535],{"class":49}," 新分支名",[39,537,538],{"class":385},"             # 创建并切换到新分支\n",[17,540,541,542,545,546,549,550,545,553,266],{},"Git 2.23 之前通常使用 ",[36,543,544],{},"git checkout \u003C分支>"," 和 ",[36,547,548],{},"git checkout -b \u003C分支>","；较新的 Git 更推荐用职责明确的 ",[36,551,552],{},"switch",[36,554,555],{},"restore",[56,557,558],{"id":558},"查看日志",[29,560,562],{"className":31,"code":561,"language":33,"meta":34,"style":34},"git log                            # 查看完整提交日志\ngit log --oneline                  # 每个提交显示为一行\ngit log -n 5                       # 查看最近 5 个提交\ngit log --all                      # 查看所有引用可达的提交\ngit log --graph --oneline --all    # 用文本图展示分支关系\n\ngit help --web log                 # 在浏览器中打开 git log 帮助\n",[36,563,564,574,586,602,614,630,634],{"__ignoreMap":34},[39,565,566,568,571],{"class":41,"line":42},[39,567,46],{"class":45},[39,569,570],{"class":49}," log",[39,572,573],{"class":385},"                            # 查看完整提交日志\n",[39,575,576,578,580,583],{"class":41,"line":85},[39,577,46],{"class":45},[39,579,570],{"class":49},[39,581,582],{"class":49}," --oneline",[39,584,585],{"class":385},"                  # 每个提交显示为一行\n",[39,587,588,590,592,595,599],{"class":41,"line":168},[39,589,46],{"class":45},[39,591,570],{"class":49},[39,593,594],{"class":49}," -n",[39,596,598],{"class":597},"s_wmW"," 5",[39,600,601],{"class":385},"                       # 查看最近 5 个提交\n",[39,603,604,606,608,611],{"class":41,"line":414},[39,605,46],{"class":45},[39,607,570],{"class":49},[39,609,610],{"class":49}," --all",[39,612,613],{"class":385},"                      # 查看所有引用可达的提交\n",[39,615,616,618,620,623,625,627],{"class":41,"line":427},[39,617,46],{"class":45},[39,619,570],{"class":49},[39,621,622],{"class":49}," --graph",[39,624,582],{"class":49},[39,626,610],{"class":49},[39,628,629],{"class":385},"    # 用文本图展示分支关系\n",[39,631,632],{"class":41,"line":444},[39,633,447],{"emptyLinePlaceholder":6},[39,635,636,638,641,644,646],{"class":41,"line":450},[39,637,46],{"class":45},[39,639,640],{"class":49}," help",[39,642,643],{"class":49}," --web",[39,645,570],{"class":49},[39,647,648],{"class":385},"                 # 在浏览器中打开 git log 帮助\n",[56,650,651],{"id":651},"比较差异",[29,653,655],{"className":31,"code":654,"language":33,"meta":34,"style":34},"git diff                           # 工作区与暂存区\ngit diff --cached                  # 暂存区与 HEAD\ngit diff HEAD                      # 工作区和暂存区相对 HEAD 的全部改动\ngit diff commit1 commit2           # 两个提交之间的差异\ngit diff branch1 branch2           # 两个分支指向的提交之间的差异\ngit diff HEAD^ HEAD                # 最近一次提交引入的差异\ngit diff commit1 commit2 -- 文件名 # 只比较指定文件\n",[36,656,657,667,679,691,706,721,735],{"__ignoreMap":34},[39,658,659,661,664],{"class":41,"line":42},[39,660,46],{"class":45},[39,662,663],{"class":49}," diff",[39,665,666],{"class":385},"                           # 工作区与暂存区\n",[39,668,669,671,673,676],{"class":41,"line":85},[39,670,46],{"class":45},[39,672,663],{"class":49},[39,674,675],{"class":49}," --cached",[39,677,678],{"class":385},"                  # 暂存区与 HEAD\n",[39,680,681,683,685,688],{"class":41,"line":168},[39,682,46],{"class":45},[39,684,663],{"class":49},[39,686,687],{"class":49}," HEAD",[39,689,690],{"class":385},"                      # 工作区和暂存区相对 HEAD 的全部改动\n",[39,692,693,695,697,700,703],{"class":41,"line":414},[39,694,46],{"class":45},[39,696,663],{"class":49},[39,698,699],{"class":49}," commit1",[39,701,702],{"class":49}," commit2",[39,704,705],{"class":385},"           # 两个提交之间的差异\n",[39,707,708,710,712,715,718],{"class":41,"line":427},[39,709,46],{"class":45},[39,711,663],{"class":49},[39,713,714],{"class":49}," branch1",[39,716,717],{"class":49}," branch2",[39,719,720],{"class":385},"           # 两个分支指向的提交之间的差异\n",[39,722,723,725,727,730,732],{"class":41,"line":444},[39,724,46],{"class":45},[39,726,663],{"class":49},[39,728,729],{"class":49}," HEAD^",[39,731,687],{"class":49},[39,733,734],{"class":385},"                # 最近一次提交引入的差异\n",[39,736,737,739,741,743,745,748,750],{"class":41,"line":450},[39,738,46],{"class":45},[39,740,663],{"class":49},[39,742,699],{"class":49},[39,744,702],{"class":49},[39,746,747],{"class":49}," --",[39,749,408],{"class":49},[39,751,752],{"class":385}," # 只比较指定文件\n",[17,754,755,758,759,762,763,766],{},[36,756,757],{},"HEAD"," 表示当前分支指向的提交，",[36,760,761],{},"HEAD^"," 或 ",[36,764,765],{},"HEAD~1"," 通常表示它的第一个父提交。",[56,768,770],{"id":769},"git-对象关系","Git 对象关系",[17,772,773],{},"一次提交会关联目录树对象，目录树再关联子目录和文件内容对应的对象。对象之间通过哈希相互引用，使 Git 能够保存并校验每次快照。",[17,775,776,777,266],{},"详见 ",[21,778,781],{"href":779,"rel":780},"https:\u002F\u002Fgit-scm.com\u002Fbook\u002Fzh\u002Fv2\u002FGit-%E5%86%85%E9%83%A8%E5%8E%9F%E7%90%86-Git-%E5%AF%B9%E8%B1%A1",[25],"Git 内部原理：Git 对象",[17,783,784],{},[785,786],"img",{"alt":770,"src":787},"\u002Fimages\u002F2021\u002Fgit\u002Fgit-1.png",[56,789,790],{"id":790},"搁置当前状态",[17,792,793],{},"需要临时切换任务、但当前修改还不适合提交时，可以使用 stash：",[29,795,797],{"className":31,"code":796,"language":33,"meta":34,"style":34},"git stash                          # 搁置已跟踪文件的当前改动\ngit stash push -u -m \"临时说明\"    # 连同未跟踪文件一起搁置并添加说明\ngit stash list                     # 查看搁置列表\ngit stash pop                      # 恢复最近一条并删除该 stash\ngit stash apply                    # 恢复最近一条但保留该 stash\ngit stash apply \"stash@{2}\"        # 恢复指定 stash；PowerShell 中建议加引号\ngit stash drop \"stash@{2}\"         # 删除指定 stash\n",[36,798,799,809,829,841,853,865,879],{"__ignoreMap":34},[39,800,801,803,806],{"class":41,"line":42},[39,802,46],{"class":45},[39,804,805],{"class":49}," stash",[39,807,808],{"class":385},"                          # 搁置已跟踪文件的当前改动\n",[39,810,811,813,815,818,821,823,826],{"class":41,"line":85},[39,812,46],{"class":45},[39,814,805],{"class":49},[39,816,817],{"class":49}," push",[39,819,820],{"class":49}," -u",[39,822,435],{"class":49},[39,824,825],{"class":49}," \"临时说明\"",[39,827,828],{"class":385},"    # 连同未跟踪文件一起搁置并添加说明\n",[39,830,831,833,835,838],{"class":41,"line":168},[39,832,46],{"class":45},[39,834,805],{"class":49},[39,836,837],{"class":49}," list",[39,839,840],{"class":385},"                     # 查看搁置列表\n",[39,842,843,845,847,850],{"class":41,"line":414},[39,844,46],{"class":45},[39,846,805],{"class":49},[39,848,849],{"class":49}," pop",[39,851,852],{"class":385},"                      # 恢复最近一条并删除该 stash\n",[39,854,855,857,859,862],{"class":41,"line":427},[39,856,46],{"class":45},[39,858,805],{"class":49},[39,860,861],{"class":49}," apply",[39,863,864],{"class":385},"                    # 恢复最近一条但保留该 stash\n",[39,866,867,869,871,873,876],{"class":41,"line":444},[39,868,46],{"class":45},[39,870,805],{"class":49},[39,872,861],{"class":49},[39,874,875],{"class":49}," \"stash@{2}\"",[39,877,878],{"class":385},"        # 恢复指定 stash；PowerShell 中建议加引号\n",[39,880,881,883,885,888,890],{"class":41,"line":450},[39,882,46],{"class":45},[39,884,805],{"class":49},[39,886,887],{"class":49}," drop",[39,889,875],{"class":49},[39,891,892],{"class":385},"         # 删除指定 stash\n",[56,894,896],{"id":895},"忽略不需要-git-管理的文件","忽略不需要 Git 管理的文件",[17,898,899,900,903],{},"在仓库的 ",[36,901,902],{},".gitignore"," 中写入匹配规则。例如：",[29,905,909],{"className":906,"code":907,"language":908,"meta":34,"style":34},"language-gitignore shiki shiki-themes catppuccin-mocha catppuccin-latte","# 依赖目录\nnode_modules\u002F\n\n# 构建产物\ndist\u002F\n.output\u002F\n\n# 环境变量；保留可提交的示例文件\n.env*\n!.env.example\n\n# 任意目录下的日志\n*.log\n","gitignore",[36,910,911,916,921,925,930,935,940,944,949,954,959,963,968],{"__ignoreMap":34},[39,912,913],{"class":41,"line":42},[39,914,915],{},"# 依赖目录\n",[39,917,918],{"class":41,"line":85},[39,919,920],{},"node_modules\u002F\n",[39,922,923],{"class":41,"line":168},[39,924,447],{"emptyLinePlaceholder":6},[39,926,927],{"class":41,"line":414},[39,928,929],{},"# 构建产物\n",[39,931,932],{"class":41,"line":427},[39,933,934],{},"dist\u002F\n",[39,936,937],{"class":41,"line":444},[39,938,939],{},".output\u002F\n",[39,941,942],{"class":41,"line":450},[39,943,447],{"emptyLinePlaceholder":6},[39,945,946],{"class":41,"line":463},[39,947,948],{},"# 环境变量；保留可提交的示例文件\n",[39,950,951],{"class":41,"line":478},[39,952,953],{},".env*\n",[39,955,956],{"class":41,"line":495},[39,957,958],{},"!.env.example\n",[39,960,961],{"class":41,"line":500},[39,962,447],{"emptyLinePlaceholder":6},[39,964,965],{"class":41,"line":511},[39,966,967],{},"# 任意目录下的日志\n",[39,969,970],{"class":41,"line":525},[39,971,972],{},"*.log\n",[17,974,975,976,979,980,983,984,987,988,990],{},"以 ",[36,977,978],{},"\u002F"," 结尾的规则匹配目录，",[36,981,982],{},"*"," 是通配符，",[36,985,986],{},"!"," 可以重新包含之前被忽略的路径。",[36,989,902],{}," 只影响尚未被跟踪的文件；如果文件已经提交过，需要先把它从暂存区索引中移除：",[29,992,994],{"className":31,"code":993,"language":33,"meta":34,"style":34},"git rm --cached 文件名\n",[36,995,996],{"__ignoreMap":34},[39,997,998,1000,1002,1004],{"class":41,"line":42},[39,999,46],{"class":45},[39,1001,455],{"class":49},[39,1003,675],{"class":49},[39,1005,1006],{"class":49}," 文件名\n",[12,1008,1009],{"id":1009},"常见问题",[56,1011,1013],{"id":1012},"怎么删除不需要的分支","怎么删除不需要的分支？",[29,1015,1017],{"className":31,"code":1016,"language":33,"meta":34,"style":34},"git branch -d 分支名   # 删除已经合并的分支\ngit branch -D 分支名   # 强制删除，请先确认其中的提交不再需要\n",[36,1018,1019,1033],{"__ignoreMap":34},[39,1020,1021,1023,1025,1028,1030],{"class":41,"line":42},[39,1022,46],{"class":45},[39,1024,505],{"class":49},[39,1026,1027],{"class":49}," -d",[39,1029,519],{"class":49},[39,1031,1032],{"class":385},"   # 删除已经合并的分支\n",[39,1034,1035,1037,1039,1042,1044],{"class":41,"line":85},[39,1036,46],{"class":45},[39,1038,505],{"class":49},[39,1040,1041],{"class":49}," -D",[39,1043,519],{"class":49},[39,1045,1046],{"class":385},"   # 强制删除，请先确认其中的提交不再需要\n",[56,1048,1050],{"id":1049},"怎么修改-commit-message","怎么修改 commit message？",[17,1052,1053],{},"修改最近一次提交：",[29,1055,1057],{"className":31,"code":1056,"language":33,"meta":34,"style":34},"git commit --amend\n",[36,1058,1059],{"__ignoreMap":34},[39,1060,1061,1063,1065],{"class":41,"line":42},[39,1062,46],{"class":45},[39,1064,432],{"class":49},[39,1066,1067],{"class":49}," --amend\n",[17,1069,1070,1071,1074,1075,1078],{},"修改更早的提交，可以启动交互式 rebase，并把对应行的 ",[36,1072,1073],{},"pick"," 改为 ",[36,1076,1077],{},"reword","：",[29,1080,1082],{"className":31,"code":1081,"language":33,"meta":34,"style":34},"git rebase -i HEAD~3\n",[36,1083,1084],{"__ignoreMap":34},[39,1085,1086,1088,1091,1094],{"class":41,"line":42},[39,1087,46],{"class":45},[39,1089,1090],{"class":49}," rebase",[39,1092,1093],{"class":49}," -i",[39,1095,1096],{"class":49}," HEAD~3\n",[17,1098,1099],{},"这会改写相关提交的哈希。不要随意修改其他人已经基于其开发的共享历史。",[56,1101,1103],{"id":1102},"怎么合并多个-commit","怎么合并多个 commit？",[17,1105,1106],{},"先选择需要整理的提交范围：",[29,1108,1110],{"className":31,"code":1109,"language":33,"meta":34,"style":34},"git rebase -i HEAD~4\n",[36,1111,1112],{"__ignoreMap":34},[39,1113,1114,1116,1118,1120],{"class":41,"line":42},[39,1115,46],{"class":45},[39,1117,1090],{"class":49},[39,1119,1093],{"class":49},[39,1121,1122],{"class":49}," HEAD~4\n",[17,1124,1125,1126,1128,1129,762,1132,1135],{},"在编辑器中保留第一个提交的 ",[36,1127,1073],{},"，将后续要并入它的提交改为 ",[36,1130,1131],{},"squash",[36,1133,1134],{},"fixup","。如果范围包含根提交，使用：",[29,1137,1139],{"className":31,"code":1138,"language":33,"meta":34,"style":34},"git rebase -i --root\n",[36,1140,1141],{"__ignoreMap":34},[39,1142,1143,1145,1147,1149],{"class":41,"line":42},[39,1144,46],{"class":45},[39,1146,1090],{"class":49},[39,1148,1093],{"class":49},[39,1150,1151],{"class":49}," --root\n",[56,1153,1155],{"id":1154},"如何取消暂存","如何取消暂存？",[17,1157,1158,1159,1161],{},"让暂存区中的指定文件恢复为 ",[36,1160,757],{}," 中的状态，但保留工作区改动：",[29,1163,1165],{"className":31,"code":1164,"language":33,"meta":34,"style":34},"git restore --staged 文件名\n",[36,1166,1167],{"__ignoreMap":34},[39,1168,1169,1171,1174,1177],{"class":41,"line":42},[39,1170,46],{"class":45},[39,1172,1173],{"class":49}," restore",[39,1175,1176],{"class":49}," --staged",[39,1178,1006],{"class":49},[17,1180,1181,1182,266],{},"旧版本 Git 也可以使用 ",[36,1183,1184],{},"git reset HEAD -- 文件名",[56,1186,1188],{"id":1187},"如何丢弃工作区改动","如何丢弃工作区改动？",[17,1190,1191],{},"让工作区文件恢复为暂存区中的版本：",[29,1193,1195],{"className":31,"code":1194,"language":33,"meta":34,"style":34},"git restore -- 文件名\n",[36,1196,1197],{"__ignoreMap":34},[39,1198,1199,1201,1203,1205],{"class":41,"line":42},[39,1200,46],{"class":45},[39,1202,1173],{"class":49},[39,1204,747],{"class":49},[39,1206,1006],{"class":49},[17,1208,1209,1210,266],{},"这个操作会覆盖尚未提交的修改，执行前应确认这些内容不再需要。旧版本 Git 的对应写法是 ",[36,1211,1212],{},"git checkout -- 文件名",[56,1214,1216],{"id":1215},"如何删除文件","如何删除文件？",[29,1218,1220],{"className":31,"code":1219,"language":33,"meta":34,"style":34},"git rm 文件名\ngit commit -m \"chore: remove unused file\"\n",[36,1221,1222,1230],{"__ignoreMap":34},[39,1223,1224,1226,1228],{"class":41,"line":42},[39,1225,46],{"class":45},[39,1227,455],{"class":49},[39,1229,1006],{"class":49},[39,1231,1232,1234,1236,1238],{"class":41,"line":85},[39,1233,46],{"class":45},[39,1235,432],{"class":49},[39,1237,435],{"class":49},[39,1239,1240],{"class":49}," \"chore: remove unused file\"\n",[1242,1243,1244],"style",{},"html pre.shiki code .s3Fsb, html code.shiki .s3Fsb{--shiki-default:#89B4FA;--shiki-default-font-style:italic;--shiki-light:#1E66F5;--shiki-light-font-style:italic}html pre.shiki code .ssZzq, html code.shiki .ssZzq{--shiki-default:#A6E3A1;--shiki-light:#40A02B}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 .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html pre.shiki code .s_l3b, html code.shiki .s_l3b{--shiki-default:#F38BA8;--shiki-default-font-style:italic;--shiki-light:#D20F39;--shiki-light-font-style:italic}html pre.shiki code .s0D_2, html code.shiki .s0D_2{--shiki-default:#9399B2;--shiki-default-font-style:italic;--shiki-light:#7C7F93;--shiki-light-font-style:italic}html pre.shiki code .s_wmW, html code.shiki .s_wmW{--shiki-default:#FAB387;--shiki-light:#FE640B}",{"title":34,"searchDepth":511,"depth":427,"links":1246},[1247,1248,1252,1253,1261],{"id":14,"depth":85,"text":15},{"id":53,"depth":85,"text":54,"children":1249},[1250,1251],{"id":58,"depth":168,"text":58},{"id":269,"depth":168,"text":270},{"id":321,"depth":85,"text":322},{"id":366,"depth":85,"text":367,"children":1254},[1255,1256,1257,1258,1259,1260],{"id":370,"depth":168,"text":370},{"id":558,"depth":168,"text":558},{"id":651,"depth":168,"text":651},{"id":769,"depth":168,"text":770},{"id":790,"depth":168,"text":790},{"id":895,"depth":168,"text":896},{"id":1009,"depth":85,"text":1009,"children":1262},[1263,1264,1265,1266,1267,1268],{"id":1012,"depth":168,"text":1013},{"id":1049,"depth":168,"text":1050},{"id":1102,"depth":168,"text":1103},{"id":1154,"depth":168,"text":1155},{"id":1187,"depth":168,"text":1188},{"id":1215,"depth":168,"text":1216},[1270],"工具","https:\u002F\u002Fgit-scm.com\u002Fimages\u002Flogo@2x.png","本文介绍Git的安装与基础配置，涵盖用户名邮箱设置及配置作用域优先级；解释工作区、暂存区和本地仓库的工作流；列举git add、commit、branch、switch、log、diff、stash、rm、mv等常用命令；说明查看日志、比较差异、对象关系、搁置改动、忽略文件等操作；并回答删除分支、修改提交信息、合并提交、取消暂存、丢弃改动和删除文件等常见问题。","md",{},"\u002Fposts\u002F2021\u002Fgit",0,"2021-09-07",{"title":5,"description":1272},"posts\u002F2021\u002Fgit","ai",[1282],"Git","#a369ff","2026-05-17",false,878,"KTWrL-hTtlbKIL3ORh4HeutjA_C5sMhmYX6uwGJuS74",[1289,1304,1318,1326,1339,1354,1367,1379,1389,1402,1414,1425,1428,1439,1452,1463,1472,1486,1498,1510,1523,1532,1542,1551],{"path":1290,"stem":1291,"title":1292,"description":1293,"wordCount":1294,"publish":1295,"update":1295,"cover":1296,"tags":1297,"categories":1303,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002F2026\u002Fwsl3","posts\u002F2026\u002Fwsl3","WSL 3 正式发布~","微软发布 WSL 3.0.1，正式提供稳定的 WSL 容器功能，无需 Docker 即可原生创建和运行 Linux 容器。该版本改进包括跨操作系统文件访问性能最高提升至原来的两倍（采用 virtiofs），以及网络模式 Consomme 优化端口映射和 VPN 兼容性。文章介绍了 WSL 安装、从 WSL 2 升级的方法，并示例使用 wslc 运行 Ubuntu、Nginx 容器及构建自定义镜像。",1038,"2026-10-01","\u002Fimages\u002F2026\u002Fwsl3\u002Fwsl3.png",[1298,1299,1300,1301,1302],"WSL","Linux","Windows","Docker","容器",[1270],{"path":1305,"stem":1306,"title":1307,"description":1308,"wordCount":1309,"publish":1310,"update":7,"cover":1311,"tags":1312,"categories":1317,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002F2026\u002Fcodex-prompt","posts\u002F2026\u002Fcodex-prompt","Codex 的 GPT-6 Sol 提示词泄露了？","文章围绕网传Codex GPT-6 Sol提示词泄露展开，选取部分内容解读。提示词要求像同事一样交流、降低认知负担，用具体描述并说明改动、原因、测试与风险；明确禁止使用AI套话；通过高质量和低质量示例约束输出。摘要表还涵盖沟通、执行、权限、长期任务、工具与界面、质量与证据等核心要求。",1073,"2026-09-25","\u002Fimages\u002F2026\u002Fcodex-prompt\u002Fcodex-prompt.png",[1313,1314,1315,1316],"AI","Codex","提示词","Agent",[1313],{"path":1319,"stem":1320,"title":1321,"description":1322,"wordCount":1323,"publish":1310,"update":7,"cover":7,"tags":1324,"categories":1325,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002F2026\u002Fcodex-prompt-translation","posts\u002F2026\u002Fcodex-prompt-translation","Codex GPT-6 Sol 提示词完整中文译文","第三方仓库收录的 Codex GPT-6 Sol 提示词中文译文，按原顺序保留全部 54 个模板。",34261,[1313,1314,1315,1316],[1313],{"path":1327,"stem":1328,"title":1329,"description":1330,"wordCount":1331,"publish":1332,"update":1333,"cover":1334,"tags":1335,"categories":1338,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002F2026\u002Fjev","posts\u002F2026\u002Fjev","JEV 是好模型吗？","本文评析JEV模型，认为其并非通用大模型，而是专做预定义判断的System One模型，通过选择、评分、是非题返回结构化结果，不生成文本。其快与便宜源于非自回归并行输出，但“零幻觉”仅指输出结构合规，判断仍可能出错。该思路适用于答案范围明确、需频繁调用的场景，也可用普通大模型近似实现，核心在于把任务收窄为单一判断。",2429,"2026-09-21","2026-09-23","\u002Fimages\u002F2026\u002Fjev\u002Fjev.webp",[1313,1336,1337],"JEV","LLM",[1313],{"path":1340,"stem":1341,"title":1342,"description":1343,"wordCount":1344,"publish":1345,"update":1346,"cover":7,"tags":1347,"categories":1352,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002Fblog\u002Foverview","posts\u002F2.blog\u002F01.overview","新版博客已上线！","新版博客“mukuchi”上线，具备文章写作、标签分类、全文搜索、阅读目录、代码复制、图片缩放、深浅主题切换及移动端适配等功能。内容以Markdown和MDC编写，后台支持草稿、上传、预览与发布，并可生成AI摘要、朗读和双人播客。技术栈采用Nuxt、Vue、UnoCSS、Nuxt Content及Cloudflare服务，文章存于GitHub仓库。后续计划增加工具、重做账号系统并改为站内评论。",1059,"2026-09-14","2026-09-22",[1348,1349,1350,1351],"博客","Nuxt","Vue","Cloudflare",[1353],"建站记录",{"path":1355,"stem":1356,"title":1357,"description":1358,"wordCount":1359,"publish":1360,"update":7,"cover":7,"tags":1361,"categories":1365,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002F2026\u002Fgame-dlss5","posts\u002F2026\u002Fgame-dlss5","哦，我的上帝！这是真实的！ —— DLSS 5 渲染实测","文章以《崩坏3rd》和《崩坏：星穹铁道》为例，展示DLSS 5渲染在多个场景下开启与关闭的画面对比。教程说明通过XXMI-Launcher注入ReShade的d3d12.dll，启动游戏后按Home键配置RenoDX DLSS参数，并提示下线前需手动关闭。文末附相关工具与网盘资源下载方式。",390,"2026-09-08",[1362,1363,1364],"DLSS5","mod","xxmi",[1366],"游戏",{"path":1368,"stem":1369,"title":1370,"description":1371,"wordCount":1372,"publish":1373,"update":1374,"cover":7,"tags":1375,"categories":1378,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002F2026\u002Fmilanote-api","posts\u002F2026\u002Fmilanote-api","Milanote API","本文介绍了作者开发的 Milanote API 项目，用于在外部使用 Milanote 分享 Board 的内容。项目已完成根据分享链接获取完整 API 数据、解析卡片内容与布局、构建 Playground 在线可视化示例、部署至 Cloudflare Workers 并提供字段筛选功能；待实现免密钥在线解析。文章还说明了获取 Milanote 只读分享链接的步骤，并展示了 Playground 界面效果。",234,"2026-07-22","2026-07-23",[1376,1377],"Milanote","API",[1270],{"path":1380,"stem":1381,"title":1382,"description":1383,"wordCount":1384,"publish":1385,"update":7,"cover":1386,"tags":1387,"categories":1388,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002F2026\u002Fduolingo","posts\u002F2026\u002Fduolingo","今天你 Duolingo 了吗？","本文介绍使用 Cloudflare Workers 构建 Duolingo 用户信息接口，解决跨域与缓存问题。接口支持按环境变量查询固定用户，返回昵称、头像、经验及连续学习天数，并提供搜索和其他用户详情接口。通过 KV 缓存和定时任务减少上游请求，支持带鉴权的手动刷新，并包含超时和错误处理。",1581,"2026-07-14","\u002Fimages\u002F2026\u002Fduolingo\u002Fduolingo.png",[1377,1351],[1270],{"path":1390,"stem":1391,"title":1392,"description":1393,"wordCount":1394,"publish":1395,"update":7,"cover":7,"tags":1396,"categories":1401,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002Fblender","posts\u002Fblender\u002Findex","Blender 专题","本文介绍Blender这一免费开源3D建模软件，涵盖建模、动画、渲染、视频剪辑等功能，适合从入门到高级开发。文档提供官网地址；教程部分包含动画大师课VV purple、角色建模课Zimon3D，并附B站链接；素材推荐BlenderKit官方素材库、Sketchfab及模之屋等免费资源平台。",158,"2026-06-18",[1397,1398,1399,1400],"Blender","3D","建模","动画",[1397],{"path":1403,"stem":1404,"title":1405,"description":1406,"wordCount":1407,"publish":1395,"update":7,"cover":7,"tags":1408,"categories":1413,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002Fthreejs","posts\u002Fthreejs\u002Findex","Three.js 专题","本文介绍Three.js作为Web端主流3D图形库，封装WebGL\u002FWebGPU，用于构建3D场景、动画、游戏和数据可视化等。文章汇总官方资源，包括官网、示例、文档、教程、在线编辑器和GitHub仓库。基础使用方面，说明在Vue3中通过TresJS、React中通过React Three Fiber进行组件化开发，并提及GSAP动画库和Blender建模软件。其他资源推荐Three.js Journey系统教程、The Book of Shaders书籍和Kenney免费游戏素材，AI与问题部分尚在完善中。",418,[1409,1410,1411,1412],"Three.js","WebGL","WebGPU","Shader",[1409],{"path":1415,"stem":1416,"title":1417,"description":1418,"wordCount":1419,"publish":1420,"update":1420,"cover":1421,"tags":1422,"categories":1424,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002F2025\u002Fmagic-js","posts\u002F2025\u002Fmagic-js","你能看懂这些 JavaScript 表达式吗？","本文解析了JavaScript中多个怪异表达式结果的原因，指出其源于IEEE 754浮点数表示、隐式类型转换及同一符号在不同语法环境中的歧义。例如NaN为number、大整数舍入、0.1+0.2不等于0.3、空数组与对象相加、布尔值运算及宽松相等等行为，均可据此解释。建议工程中使用严格相等和明确转换以避免陷阱。",2035,"2025-07-31","\u002Fimages\u002F2025\u002Fmagic-js\u002Fmagic-js.png",[1423],"JavaScript",[1423],{"path":1275,"stem":1279,"title":5,"description":1272,"wordCount":1286,"publish":1277,"update":1284,"cover":1271,"tags":1426,"categories":1427,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},[1282],[1270],{"path":1429,"stem":1430,"title":1431,"description":1432,"wordCount":1433,"publish":1434,"update":7,"cover":1435,"tags":1436,"categories":1438,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002F2021\u002Fhexo-editor","posts\u002F2021\u002Fhexo-editor","HexoEditor(适用于Hexo的专用编辑器)","本文介绍了专为Hexo优化的Markdown编辑器HexoEditor。该编辑器预览效果与Hexo生成页面高度相似，支持快速执行Hexo命令。软件开源，可从GitHub获取安装程序及中英文手册。配置包括通用、编辑、Hexo路径设置、渲染主题（支持GitHub和Next）以及图片云存储（如SM.MS、腾讯云等）。还提供右键快捷操作Hexo命令。",587,"2021-03-22","\u002Fimages\u002F2021\u002Fhexo-editor\u002Fhexo-editor.jpg",[1270,1437],"Hexo",[1270],{"path":1440,"stem":1441,"title":1442,"description":1443,"wordCount":1444,"publish":1434,"update":7,"cover":1445,"tags":1446,"categories":1450,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002F2021\u002Ftomcat-servlet","posts\u002F2021\u002Ftomcat-servlet","Tomcat和Servlet应用配置及部分问题","本文介绍Tomcat与Servlet的配置及常见问题。Tomcat部分涵盖安装、环境变量、启动关闭、乱码与端口占用处理、项目部署及IDEA集成。Servlet部分说明实现方式、生命周期、请求与响应对象、乱码处理、请求转发与重定向，以及Cookie、Session、ServletContext等对象和三大域对象的作用范围。",4196,"\u002Fimages\u002F2021\u002Ftomcat-servlet\u002Ftomcat-servlet.jpg",[1447,1448,1449],"JavaWEb","Tomcat","Servlet",[1451],"笔记",{"path":1453,"stem":1454,"title":1455,"description":1456,"wordCount":1457,"publish":1458,"update":7,"cover":1459,"tags":1460,"categories":1462,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002F2021\u002Fgithub-actions","posts\u002F2021\u002Fgithub-actions","使用Github Action实现全自动部署","本文介绍使用GitHub Action实现Hexo博客全自动部署的流程。需先获取GitHub与Coding的个人访问令牌，创建存放源码的私有仓库，并在站点配置中设置部署仓库地址和令牌。接着在.github\u002Fworkflows目录创建自动部署工作流文件，配置检出、安装Node与Hexo、缓存依赖、生成静态文件和部署步骤。随后更新远程仓库分支，添加.gitignore屏蔽项并推送源码，最后通过Actions查看部署状态。",910,"2021-01-26","\u002Fimages\u002F2021\u002Fgithub-actions\u002Fgithub-actions.jpg",[1461],"博客优化",[1461],{"path":1464,"stem":1465,"title":1466,"description":1467,"wordCount":1468,"publish":1458,"update":7,"cover":1469,"tags":1470,"categories":1471,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002F2021\u002Fhexo-auto-open-editor","posts\u002F2021\u002Fhexo-auto-open-editor","Hexo添加文章时自动打开编辑器","本文介绍Hexo新建文章后自动打开编辑器的方法。通过监听Hexo的new事件并在scripts目录下添加脚本，利用child_process.exec执行系统命令，Windows使用start、macOS使用open -a启动指定编辑器并打开新文章路径。用户需替换脚本中的编辑器绝对地址，保存后执行hexo new即可自动打开对应文件。",269,"\u002Fimages\u002F2021\u002Fhexo-auto-open-editor\u002Fhexo-auto-open-editor.webp",[1461],[1461],{"path":1473,"stem":1474,"title":1475,"description":1476,"wordCount":1477,"publish":1478,"update":7,"cover":1479,"tags":1480,"categories":1485,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002F2021\u002Fhttp-canary-ca","posts\u002F2021\u002Fhttp-canary-ca","解决部分安卓11HttpCanary无法安装证书及其他诸多问题","本文分享安卓11下HttpCanary证书安装失败等问题的解决方法，需root或虚拟机。MIUI系统点击安装根证书无反应时，将指定缓存路径的HttpCanary.pem复制为HttpCanary.jks并重启应用，再以root权限安装到系统；无效则先导出带.0证书再安装。抓https失败或提示证书不可信，可安装Xposed框架和JustTrustMe插件关闭SSL认证。资源可从酷安或应用商店获取，免费版与付费版主要区别为插件支持。",506,"2021-01-16","\u002Fimages\u002F2021\u002Fhttp-canary-ca\u002Fhttp-canary-ca.png",[1481,1482,1483,1484],"Android","HttpCanary","抓包","问题",[1483],{"path":1487,"stem":1488,"title":1489,"description":1490,"wordCount":1491,"publish":1492,"update":7,"cover":1493,"tags":1494,"categories":1497,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002F2020\u002Fmysql-basics","posts\u002F2020\u002Fmysql-basics","MySQL 基础","本文介绍MySQL关系型数据库管理系统基础知识，包括数据库、数据库管理系统、数据库系统和数据库应用系统的概念，及其数据结构化、共享性高、冗余度低、独立性强和统一管理等特点；简述数据库的创建、查看、打开、修改和删除操作，以及数据表的创建、修改、删除和表数据的添加、更新、删除方法，并提及图形化管理工具。",1825,"2020-06-05","\u002Fimages\u002F2020\u002Fmysql-basics\u002Fmysql-basics.png",[1495,1496],"mysql","数据库",[1451],{"path":1499,"stem":1500,"title":1501,"description":1502,"wordCount":1503,"publish":1504,"update":7,"cover":1505,"tags":1506,"categories":1509,"series":7,"seriesOrder":7,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002F2020\u002Fpython-tkinter","posts\u002F2020\u002Fpython-tkinter","Python图形用户界面(Tkinter)","本文简介Python常用GUI库，重点说明Tkinter的标准控件、共同属性及pack、grid、place三种几何布局管理器。使用Tkinter需导入模块、创建控件、添加交互并编写函数、进入主事件循环。文中以简单登录界面为例，演示标签、输入框、按钮的放置，以及为按钮设置回调函数进行输入校验和登录提示。",965,"2020-05-25","\u002Fimages\u002F2020\u002Fpython-tkinter\u002Fpython-tkinter.jpg",[1507,1508],"Python","GUI",[1451],{"path":1511,"stem":1512,"title":1513,"description":1514,"wordCount":1515,"publish":1516,"update":1517,"cover":7,"tags":1518,"categories":1521,"series":1522,"seriesOrder":427,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002Fmarkdown\u002Fcollapse","posts\u002F1.markdown\u002F05.collapse","在正文中使用折叠内容","本文说明正文中折叠内容的使用方法：折叠块适合放置补充说明、较长代码或可选阅读内容，标题始终可见，点击整行展开，各折叠块独立记录状态。支持默认收起，也可通过 open 属性设置初始展开。折叠内部可包含 Markdown、列表、代码、表格、图片等，目录或锚点访问内部标题会先展开所属折叠块。还支持嵌套折叠，外层使用三个冒号、内层使用两个冒号，内外层独立控制；访问嵌套目标可一次展开沿途两层。",428,"1970-01-01","2026-09-26",[1519,1520],"Markdown","MDC",[1522],"文章示例",{"path":1524,"stem":1525,"title":1526,"description":1527,"wordCount":1528,"publish":1516,"update":1333,"cover":7,"tags":1529,"categories":1531,"series":1522,"seriesOrder":414,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002Fmarkdown\u002Fvideo","posts\u002F1.markdown\u002F04.video","在文章中嵌入视频","本文介绍在文章与关于页中嵌入Bilibili和YouTube视频的MDC组件用法，无需API密钥或手写iframe。播放器按16:9自适应宽度，接近可视区域时加载，默认不自动播放。Bilibili可通过BV号或视频链接指定分P与开始时间，YouTube可通过11位视频ID或链接指定开始时间，标题由title参数设置。组件会过滤分享追踪参数与自动播放设置，无效参数仅显示提示，不影响正文。",597,[1519,1520,1530],"视频",[1522],{"path":1533,"stem":1534,"title":1535,"description":1536,"wordCount":1537,"publish":1516,"update":1538,"cover":7,"tags":1539,"categories":1541,"series":1522,"seriesOrder":168,"pin":1276,"wip":6,"theme":1283},"\u002Fposts\u002Fmarkdown\u002Fmarkdown-extended","posts\u002F1.markdown\u002F03.markdown-extended","Markdown 扩展功能","本文介绍Markdown扩展功能。已实现多风格提醒框，支持GitHub、Obsidian、VitePress、Docusaurus四种主题及折叠嵌套，可通过参数或全站配置设置；同时提供GitHub仓库卡片、Bilibili\u002FYouTube视频卡片与正文图片预览。图片画廊与作品集仍在计划中，当前采用标准图片语法配合图注和链接。GitHub仓库卡片在构建时获取公开仓库数据快照，不可用字段显示短横线。后续将实现图片画廊与作品集。",1822,"2026-09-27",[1519,1520,1540],"功能规划",[1522],{"path":1543,"stem":1544,"title":1545,"description":1546,"wordCount":1547,"publish":1516,"update":1538,"cover":7,"tags":1548,"categories":1550,"series":1522,"seriesOrder":85,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002Fmarkdown\u002Fmdc-tutorial","posts\u002F1.markdown\u002F02.mdc-tutorial","MDC 教程","本文介绍 MDC（Markdown Components）在 Nuxt Content 中的语法与用法，涵盖块级容器、行内属性、Props 传递、插槽、嵌套、绑定文章数据，以及代码块与代码组、图片预览、GitHub 仓库卡片、视频卡片、提醒框和文章自动提醒等已接入功能。文末说明自定义组件需实现并注册，并解答组件不显示、插槽误识别等常见问题。",2594,[1520,1549,1350],"Nuxt Content",[1522],{"path":1552,"stem":1553,"title":1554,"description":1555,"wordCount":1556,"publish":1516,"update":1345,"cover":7,"tags":1557,"categories":1559,"series":1522,"seriesOrder":42,"pin":1276,"wip":1285,"theme":1283},"\u002Fposts\u002Fmarkdown\u002Fmarkdown","posts\u002F1.markdown\u002F01.markdown","Markdown 教程","本文为 Markdown 教程，系统介绍常用语法：段落与换行、标题与目录生成、引用、无序\u002F有序\u002F任务列表、强调与行内代码、普通\u002F引用式\u002F自动链接、图片、代码块、表格、分隔线与转义，并说明本站 Nuxt Content 环境下文章文件位置、frontmatter 要求及后续扩展内容。",1449,[1519,1558],"写作",[1522],1791108778914]