[{"data":1,"prerenderedAt":2357},["ShallowReactive",2],{"sidebar-page":3,"page-\u002Fgit-memo-2026-09-25":4},null,{"id":5,"title":6,"author":7,"body":8,"cover":3,"date":2347,"description":14,"extension":2348,"meta":2349,"navigation":80,"path":2350,"seo":2351,"stem":2352,"tags":2353,"__hash__":2356},"content\u002Fgit-memo-2026-09-25.md","Git 备忘录","AeYunDian",{"type":9,"value":10,"toc":2316},"minimark",[11,15,20,250,254,367,371,438,442,629,632,710,720,724,727,801,804,858,861,905,908,1000,1003,1038,1048,1052,1154,1157,1161,1327,1339,1343,1440,1444,1588,1592,1596,1615,1618,1643,1647,1693,1697,1737,1741,1784,1787,1809,1813,1824,1854,1857,1861,1901,1911,1915,1923,1926,2020,2023,2029,2033,2217,2221,2274,2277,2280,2283,2313],[12,13,14],"p",{},"日常高频命令速查。按\"场景\"而非\"命令字母\"组织，便于出问题时直接翻。",[16,17,19],"h2",{"id":18},"一配置","一、配置",[21,22,27],"pre",{"className":23,"code":24,"language":25,"meta":26,"style":26},"language-bash shiki shiki-themes monokai","# 用户信息（全局）\ngit config --global user.name \"Your Name\"\ngit config --global user.email \"you@example.com\"\n\n# 换行符（Windows 推荐）\ngit config --global core.autocrlf true\n\n# 中文文件名不乱码\ngit config --global core.quotepath false\n\n# 默认分支名\ngit config --global init.defaultBranch main\n\n# 常用别名\ngit config --global alias.st status\ngit config --global alias.co checkout\ngit config --global alias.br branch\ngit config --global alias.lg \"log --oneline --graph --decorate --all\"\n\n# 查看所有配置\ngit config --list --show-origin\n","bash","",[28,29,30,39,60,75,82,88,103,108,114,129,134,140,155,160,166,181,196,211,226,231,237],"code",{"__ignoreMap":26},[31,32,35],"span",{"class":33,"line":34},"line",1,[31,36,38],{"class":37},"snpHw","# 用户信息（全局）\n",[31,40,42,46,50,54,57],{"class":33,"line":41},2,[31,43,45],{"class":44},"sHkqI","git",[31,47,49],{"class":48},"s_Ekj"," config",[31,51,53],{"class":52},"s7s5_"," --global",[31,55,56],{"class":48}," user.name",[31,58,59],{"class":48}," \"Your Name\"\n",[31,61,63,65,67,69,72],{"class":33,"line":62},3,[31,64,45],{"class":44},[31,66,49],{"class":48},[31,68,53],{"class":52},[31,70,71],{"class":48}," user.email",[31,73,74],{"class":48}," \"you@example.com\"\n",[31,76,78],{"class":33,"line":77},4,[31,79,81],{"emptyLinePlaceholder":80},true,"\n",[31,83,85],{"class":33,"line":84},5,[31,86,87],{"class":37},"# 换行符（Windows 推荐）\n",[31,89,91,93,95,97,100],{"class":33,"line":90},6,[31,92,45],{"class":44},[31,94,49],{"class":48},[31,96,53],{"class":52},[31,98,99],{"class":48}," core.autocrlf",[31,101,102],{"class":52}," true\n",[31,104,106],{"class":33,"line":105},7,[31,107,81],{"emptyLinePlaceholder":80},[31,109,111],{"class":33,"line":110},8,[31,112,113],{"class":37},"# 中文文件名不乱码\n",[31,115,117,119,121,123,126],{"class":33,"line":116},9,[31,118,45],{"class":44},[31,120,49],{"class":48},[31,122,53],{"class":52},[31,124,125],{"class":48}," core.quotepath",[31,127,128],{"class":52}," false\n",[31,130,132],{"class":33,"line":131},10,[31,133,81],{"emptyLinePlaceholder":80},[31,135,137],{"class":33,"line":136},11,[31,138,139],{"class":37},"# 默认分支名\n",[31,141,143,145,147,149,152],{"class":33,"line":142},12,[31,144,45],{"class":44},[31,146,49],{"class":48},[31,148,53],{"class":52},[31,150,151],{"class":48}," init.defaultBranch",[31,153,154],{"class":48}," main\n",[31,156,158],{"class":33,"line":157},13,[31,159,81],{"emptyLinePlaceholder":80},[31,161,163],{"class":33,"line":162},14,[31,164,165],{"class":37},"# 常用别名\n",[31,167,169,171,173,175,178],{"class":33,"line":168},15,[31,170,45],{"class":44},[31,172,49],{"class":48},[31,174,53],{"class":52},[31,176,177],{"class":48}," alias.st",[31,179,180],{"class":48}," status\n",[31,182,184,186,188,190,193],{"class":33,"line":183},16,[31,185,45],{"class":44},[31,187,49],{"class":48},[31,189,53],{"class":52},[31,191,192],{"class":48}," alias.co",[31,194,195],{"class":48}," checkout\n",[31,197,199,201,203,205,208],{"class":33,"line":198},17,[31,200,45],{"class":44},[31,202,49],{"class":48},[31,204,53],{"class":52},[31,206,207],{"class":48}," alias.br",[31,209,210],{"class":48}," branch\n",[31,212,214,216,218,220,223],{"class":33,"line":213},18,[31,215,45],{"class":44},[31,217,49],{"class":48},[31,219,53],{"class":52},[31,221,222],{"class":48}," alias.lg",[31,224,225],{"class":48}," \"log --oneline --graph --decorate --all\"\n",[31,227,229],{"class":33,"line":228},19,[31,230,81],{"emptyLinePlaceholder":80},[31,232,234],{"class":33,"line":233},20,[31,235,236],{"class":37},"# 查看所有配置\n",[31,238,240,242,244,247],{"class":33,"line":239},21,[31,241,45],{"class":44},[31,243,49],{"class":48},[31,245,246],{"class":52}," --list",[31,248,249],{"class":52}," --show-origin\n",[16,251,253],{"id":252},"二基础工作流","二、基础工作流",[21,255,257],{"className":23,"code":256,"language":25,"meta":26,"style":26},"git status                    # 查看工作区状态\ngit add \u003Cfile>                # 暂存指定文件\ngit add .                     # 暂存所有改动（不含删除）\ngit add -A                    # 暂存所有改动（含删除）\ngit commit -m \"message\"       # 提交\ngit commit -am \"message\"      # 跳过 add，直接提交已跟踪文件\ngit push                      # 推送\ngit pull                      # 拉取并合并\n",[28,258,259,269,293,305,317,333,347,357],{"__ignoreMap":26},[31,260,261,263,266],{"class":33,"line":34},[31,262,45],{"class":44},[31,264,265],{"class":48}," status",[31,267,268],{"class":37},"                    # 查看工作区状态\n",[31,270,271,273,276,280,283,287,290],{"class":33,"line":41},[31,272,45],{"class":44},[31,274,275],{"class":48}," add",[31,277,279],{"class":278},"s8I7P"," \u003C",[31,281,282],{"class":48},"fil",[31,284,286],{"class":285},"sCdxs","e",[31,288,289],{"class":278},">",[31,291,292],{"class":37},"                # 暂存指定文件\n",[31,294,295,297,299,302],{"class":33,"line":62},[31,296,45],{"class":44},[31,298,275],{"class":48},[31,300,301],{"class":48}," .",[31,303,304],{"class":37},"                     # 暂存所有改动（不含删除）\n",[31,306,307,309,311,314],{"class":33,"line":77},[31,308,45],{"class":44},[31,310,275],{"class":48},[31,312,313],{"class":52}," -A",[31,315,316],{"class":37},"                    # 暂存所有改动（含删除）\n",[31,318,319,321,324,327,330],{"class":33,"line":84},[31,320,45],{"class":44},[31,322,323],{"class":48}," commit",[31,325,326],{"class":52}," -m",[31,328,329],{"class":48}," \"message\"",[31,331,332],{"class":37},"       # 提交\n",[31,334,335,337,339,342,344],{"class":33,"line":90},[31,336,45],{"class":44},[31,338,323],{"class":48},[31,340,341],{"class":52}," -am",[31,343,329],{"class":48},[31,345,346],{"class":37},"      # 跳过 add，直接提交已跟踪文件\n",[31,348,349,351,354],{"class":33,"line":105},[31,350,45],{"class":44},[31,352,353],{"class":48}," push",[31,355,356],{"class":37},"                      # 推送\n",[31,358,359,361,364],{"class":33,"line":110},[31,360,45],{"class":44},[31,362,363],{"class":48}," pull",[31,365,366],{"class":37},"                      # 拉取并合并\n",[368,369,370],"h3",{"id":370},"查看差异",[21,372,374],{"className":23,"code":373,"language":25,"meta":26,"style":26},"git diff                      # 工作区 vs 暂存区\ngit diff --staged             # 暂存区 vs 最新提交\ngit diff HEAD                 # 工作区 + 暂存区 vs 最新提交\ngit diff \u003Cbranch1>..\u003Cbranch2> # 两分支差异\n",[28,375,376,386,398,410],{"__ignoreMap":26},[31,377,378,380,383],{"class":33,"line":34},[31,379,45],{"class":44},[31,381,382],{"class":48}," diff",[31,384,385],{"class":37},"                      # 工作区 vs 暂存区\n",[31,387,388,390,392,395],{"class":33,"line":41},[31,389,45],{"class":44},[31,391,382],{"class":48},[31,393,394],{"class":52}," --staged",[31,396,397],{"class":37},"             # 暂存区 vs 最新提交\n",[31,399,400,402,404,407],{"class":33,"line":62},[31,401,45],{"class":44},[31,403,382],{"class":48},[31,405,406],{"class":48}," HEAD",[31,408,409],{"class":37},"                 # 工作区 + 暂存区 vs 最新提交\n",[31,411,412,414,416,418,421,424,427,430,432,435],{"class":33,"line":77},[31,413,45],{"class":44},[31,415,382],{"class":48},[31,417,279],{"class":278},[31,419,420],{"class":48},"branch",[31,422,423],{"class":278},"1>",[31,425,426],{"class":48},"..",[31,428,429],{"class":278},"\u003C",[31,431,420],{"class":48},[31,433,434],{"class":278},"2>",[31,436,437],{"class":37}," # 两分支差异\n",[16,439,441],{"id":440},"三分支","三、分支",[21,443,445],{"className":23,"code":444,"language":25,"meta":26,"style":26},"git branch                    # 查看本地分支\ngit branch -a                 # 查看所有分支（含远程）\ngit branch -vv                # 查看分支及跟踪关系\ngit branch \u003Cname>             # 创建分支\ngit switch \u003Cname>             # 切换分支（新版推荐）\ngit switch -c \u003Cname>          # 创建并切换\ngit checkout -b \u003Cname>        # 同上（旧版写法）\ngit branch -d \u003Cname>          # 删除已合并分支\ngit branch -D \u003Cname>          # 强制删除\ngit branch -m \u003Cold> \u003Cnew>     # 重命名分支\n",[28,446,447,457,469,481,499,517,537,558,578,598],{"__ignoreMap":26},[31,448,449,451,454],{"class":33,"line":34},[31,450,45],{"class":44},[31,452,453],{"class":48}," branch",[31,455,456],{"class":37},"                    # 查看本地分支\n",[31,458,459,461,463,466],{"class":33,"line":41},[31,460,45],{"class":44},[31,462,453],{"class":48},[31,464,465],{"class":52}," -a",[31,467,468],{"class":37},"                 # 查看所有分支（含远程）\n",[31,470,471,473,475,478],{"class":33,"line":62},[31,472,45],{"class":44},[31,474,453],{"class":48},[31,476,477],{"class":52}," -vv",[31,479,480],{"class":37},"                # 查看分支及跟踪关系\n",[31,482,483,485,487,489,492,494,496],{"class":33,"line":77},[31,484,45],{"class":44},[31,486,453],{"class":48},[31,488,279],{"class":278},[31,490,491],{"class":48},"nam",[31,493,286],{"class":285},[31,495,289],{"class":278},[31,497,498],{"class":37},"             # 创建分支\n",[31,500,501,503,506,508,510,512,514],{"class":33,"line":84},[31,502,45],{"class":44},[31,504,505],{"class":48}," switch",[31,507,279],{"class":278},[31,509,491],{"class":48},[31,511,286],{"class":285},[31,513,289],{"class":278},[31,515,516],{"class":37},"             # 切换分支（新版推荐）\n",[31,518,519,521,523,526,528,530,532,534],{"class":33,"line":90},[31,520,45],{"class":44},[31,522,505],{"class":48},[31,524,525],{"class":52}," -c",[31,527,279],{"class":278},[31,529,491],{"class":48},[31,531,286],{"class":285},[31,533,289],{"class":278},[31,535,536],{"class":37},"          # 创建并切换\n",[31,538,539,541,544,547,549,551,553,555],{"class":33,"line":105},[31,540,45],{"class":44},[31,542,543],{"class":48}," checkout",[31,545,546],{"class":52}," -b",[31,548,279],{"class":278},[31,550,491],{"class":48},[31,552,286],{"class":285},[31,554,289],{"class":278},[31,556,557],{"class":37},"        # 同上（旧版写法）\n",[31,559,560,562,564,567,569,571,573,575],{"class":33,"line":110},[31,561,45],{"class":44},[31,563,453],{"class":48},[31,565,566],{"class":52}," -d",[31,568,279],{"class":278},[31,570,491],{"class":48},[31,572,286],{"class":285},[31,574,289],{"class":278},[31,576,577],{"class":37},"          # 删除已合并分支\n",[31,579,580,582,584,587,589,591,593,595],{"class":33,"line":116},[31,581,45],{"class":44},[31,583,453],{"class":48},[31,585,586],{"class":52}," -D",[31,588,279],{"class":278},[31,590,491],{"class":48},[31,592,286],{"class":285},[31,594,289],{"class":278},[31,596,597],{"class":37},"          # 强制删除\n",[31,599,600,602,604,606,608,611,614,616,618,621,624,626],{"class":33,"line":131},[31,601,45],{"class":44},[31,603,453],{"class":48},[31,605,326],{"class":52},[31,607,279],{"class":278},[31,609,610],{"class":48},"ol",[31,612,613],{"class":285},"d",[31,615,289],{"class":278},[31,617,279],{"class":278},[31,619,620],{"class":48},"ne",[31,622,623],{"class":285},"w",[31,625,289],{"class":278},[31,627,628],{"class":37},"     # 重命名分支\n",[368,630,631],{"id":631},"合并与变基",[21,633,635],{"className":23,"code":634,"language":25,"meta":26,"style":26},"git merge \u003Cbranch>            # 合并到当前分支（保留历史）\ngit merge --no-ff \u003Cbranch>    # 强制生成合并提交\ngit rebase \u003Cbranch>           # 变基（线性历史）\ngit rebase -i HEAD~3          # 交互式变基，重写最近 3 条提交\n",[28,636,637,657,677,695],{"__ignoreMap":26},[31,638,639,641,644,646,649,652,654],{"class":33,"line":34},[31,640,45],{"class":44},[31,642,643],{"class":48}," merge",[31,645,279],{"class":278},[31,647,648],{"class":48},"branc",[31,650,651],{"class":285},"h",[31,653,289],{"class":278},[31,655,656],{"class":37},"            # 合并到当前分支（保留历史）\n",[31,658,659,661,663,666,668,670,672,674],{"class":33,"line":41},[31,660,45],{"class":44},[31,662,643],{"class":48},[31,664,665],{"class":52}," --no-ff",[31,667,279],{"class":278},[31,669,648],{"class":48},[31,671,651],{"class":285},[31,673,289],{"class":278},[31,675,676],{"class":37},"    # 强制生成合并提交\n",[31,678,679,681,684,686,688,690,692],{"class":33,"line":62},[31,680,45],{"class":44},[31,682,683],{"class":48}," rebase",[31,685,279],{"class":278},[31,687,648],{"class":48},[31,689,651],{"class":285},[31,691,289],{"class":278},[31,693,694],{"class":37},"           # 变基（线性历史）\n",[31,696,697,699,701,704,707],{"class":33,"line":77},[31,698,45],{"class":44},[31,700,683],{"class":48},[31,702,703],{"class":52}," -i",[31,705,706],{"class":48}," HEAD~3",[31,708,709],{"class":37},"          # 交互式变基，重写最近 3 条提交\n",[711,712,713],"blockquote",{},[12,714,715,719],{},[716,717,718],"strong",{},"原则","：已推送到共享远程的分支不要 rebase；只在本地分支上用。",[16,721,723],{"id":722},"四撤销与回退","四、撤销与回退",[12,725,726],{},"这是最容易踩坑的地方，先分清三种\"撤销\"：",[728,729,730,749],"table",{},[731,732,733],"thead",{},[734,735,736,740,743,746],"tr",{},[737,738,739],"th",{},"命令",[737,741,742],{},"作用范围",[737,744,745],{},"是否修改历史",[737,747,748],{},"使用场景",[750,751,752,769,785],"tbody",{},[734,753,754,760,763,766],{},[755,756,757],"td",{},[28,758,759],{},"git restore",[755,761,762],{},"工作区 \u002F 暂存区",[755,764,765],{},"否",[755,767,768],{},"丢弃未提交的修改",[734,770,771,776,779,782],{},[755,772,773],{},[28,774,775],{},"git reset",[755,777,778],{},"暂存区 \u002F 提交历史",[755,780,781],{},"是",[755,783,784],{},"撤销提交（未推送）",[734,786,787,792,795,798],{},[755,788,789],{},[28,790,791],{},"git revert",[755,793,794],{},"提交历史",[755,796,797],{},"否（新增反向提交）",[755,799,800],{},"撤销已推送的提交",[368,802,803],{"id":803},"丢弃工作区修改",[21,805,807],{"className":23,"code":806,"language":25,"meta":26,"style":26},"git restore \u003Cfile>            # 丢弃单个文件的未暂存修改\ngit restore .                 # 丢弃所有未暂存修改（危险）\ngit checkout -- \u003Cfile>        # 旧版写法\n",[28,808,809,827,838],{"__ignoreMap":26},[31,810,811,813,816,818,820,822,824],{"class":33,"line":34},[31,812,45],{"class":44},[31,814,815],{"class":48}," restore",[31,817,279],{"class":278},[31,819,282],{"class":48},[31,821,286],{"class":285},[31,823,289],{"class":278},[31,825,826],{"class":37},"            # 丢弃单个文件的未暂存修改\n",[31,828,829,831,833,835],{"class":33,"line":41},[31,830,45],{"class":44},[31,832,815],{"class":48},[31,834,301],{"class":48},[31,836,837],{"class":37},"                 # 丢弃所有未暂存修改（危险）\n",[31,839,840,842,844,847,849,851,853,855],{"class":33,"line":62},[31,841,45],{"class":44},[31,843,543],{"class":48},[31,845,846],{"class":52}," --",[31,848,279],{"class":278},[31,850,282],{"class":48},[31,852,286],{"class":285},[31,854,289],{"class":278},[31,856,857],{"class":37},"        # 旧版写法\n",[368,859,860],{"id":860},"取消暂存",[21,862,864],{"className":23,"code":863,"language":25,"meta":26,"style":26},"git restore --staged \u003Cfile>   # 从暂存区移回工作区\ngit reset HEAD \u003Cfile>         # 旧版写法\n",[28,865,866,885],{"__ignoreMap":26},[31,867,868,870,872,874,876,878,880,882],{"class":33,"line":34},[31,869,45],{"class":44},[31,871,815],{"class":48},[31,873,394],{"class":52},[31,875,279],{"class":278},[31,877,282],{"class":48},[31,879,286],{"class":285},[31,881,289],{"class":278},[31,883,884],{"class":37},"   # 从暂存区移回工作区\n",[31,886,887,889,892,894,896,898,900,902],{"class":33,"line":41},[31,888,45],{"class":44},[31,890,891],{"class":48}," reset",[31,893,406],{"class":48},[31,895,279],{"class":278},[31,897,282],{"class":48},[31,899,286],{"class":285},[31,901,289],{"class":278},[31,903,904],{"class":37},"         # 旧版写法\n",[368,906,907],{"id":907},"撤销提交",[21,909,911],{"className":23,"code":910,"language":25,"meta":26,"style":26},"# 保留改动在工作区\ngit reset --soft HEAD~1\n\n# 保留改动在暂存区\ngit reset --mixed HEAD~1      # 默认\n\n# 彻底丢弃改动（危险）\ngit reset --hard HEAD~1\n\n# 撤销已推送的提交（安全）\ngit revert \u003Ccommit-hash>\n",[28,912,913,918,930,934,939,954,958,963,974,978,983],{"__ignoreMap":26},[31,914,915],{"class":33,"line":34},[31,916,917],{"class":37},"# 保留改动在工作区\n",[31,919,920,922,924,927],{"class":33,"line":41},[31,921,45],{"class":44},[31,923,891],{"class":48},[31,925,926],{"class":52}," --soft",[31,928,929],{"class":48}," HEAD~1\n",[31,931,932],{"class":33,"line":62},[31,933,81],{"emptyLinePlaceholder":80},[31,935,936],{"class":33,"line":77},[31,937,938],{"class":37},"# 保留改动在暂存区\n",[31,940,941,943,945,948,951],{"class":33,"line":84},[31,942,45],{"class":44},[31,944,891],{"class":48},[31,946,947],{"class":52}," --mixed",[31,949,950],{"class":48}," HEAD~1",[31,952,953],{"class":37},"      # 默认\n",[31,955,956],{"class":33,"line":90},[31,957,81],{"emptyLinePlaceholder":80},[31,959,960],{"class":33,"line":105},[31,961,962],{"class":37},"# 彻底丢弃改动（危险）\n",[31,964,965,967,969,972],{"class":33,"line":110},[31,966,45],{"class":44},[31,968,891],{"class":48},[31,970,971],{"class":52}," --hard",[31,973,929],{"class":48},[31,975,976],{"class":33,"line":116},[31,977,81],{"emptyLinePlaceholder":80},[31,979,980],{"class":33,"line":131},[31,981,982],{"class":37},"# 撤销已推送的提交（安全）\n",[31,984,985,987,990,992,995,997],{"class":33,"line":136},[31,986,45],{"class":44},[31,988,989],{"class":48}," revert",[31,991,279],{"class":278},[31,993,994],{"class":48},"commit-has",[31,996,651],{"class":285},[31,998,999],{"class":278},">\n",[368,1001,1002],{"id":1002},"找回丢失的提交",[21,1004,1006],{"className":23,"code":1005,"language":25,"meta":26,"style":26},"git reflog                    # 查看 HEAD 移动历史\ngit reset --hard \u003Chash>       # 回到某个历史位置\n",[28,1007,1008,1018],{"__ignoreMap":26},[31,1009,1010,1012,1015],{"class":33,"line":34},[31,1011,45],{"class":44},[31,1013,1014],{"class":48}," reflog",[31,1016,1017],{"class":37},"                    # 查看 HEAD 移动历史\n",[31,1019,1020,1022,1024,1026,1028,1031,1033,1035],{"class":33,"line":41},[31,1021,45],{"class":44},[31,1023,891],{"class":48},[31,1025,971],{"class":52},[31,1027,279],{"class":278},[31,1029,1030],{"class":48},"has",[31,1032,651],{"class":285},[31,1034,289],{"class":278},[31,1036,1037],{"class":37},"       # 回到某个历史位置\n",[12,1039,1040,1043,1044,1047],{},[28,1041,1042],{},"reset --hard"," 后如果后悔，",[28,1045,1046],{},"reflog"," 通常能救回来，除非已经 GC。",[16,1049,1051],{"id":1050},"五贮藏stash","五、贮藏（stash）",[21,1053,1055],{"className":23,"code":1054,"language":25,"meta":26,"style":26},"git stash                     # 贮藏当前改动\ngit stash -u                  # 含未跟踪文件\ngit stash list                # 查看贮藏列表\ngit stash pop                 # 弹出最近贮藏并删除\ngit stash apply stash@{0}     # 应用指定贮藏（保留）\ngit stash drop stash@{0}      # 删除指定贮藏\ngit stash clear               # 清空所有贮藏\n",[28,1056,1057,1067,1079,1091,1103,1124,1142],{"__ignoreMap":26},[31,1058,1059,1061,1064],{"class":33,"line":34},[31,1060,45],{"class":44},[31,1062,1063],{"class":48}," stash",[31,1065,1066],{"class":37},"                     # 贮藏当前改动\n",[31,1068,1069,1071,1073,1076],{"class":33,"line":41},[31,1070,45],{"class":44},[31,1072,1063],{"class":48},[31,1074,1075],{"class":52}," -u",[31,1077,1078],{"class":37},"                  # 含未跟踪文件\n",[31,1080,1081,1083,1085,1088],{"class":33,"line":62},[31,1082,45],{"class":44},[31,1084,1063],{"class":48},[31,1086,1087],{"class":48}," list",[31,1089,1090],{"class":37},"                # 查看贮藏列表\n",[31,1092,1093,1095,1097,1100],{"class":33,"line":77},[31,1094,45],{"class":44},[31,1096,1063],{"class":48},[31,1098,1099],{"class":48}," pop",[31,1101,1102],{"class":37},"                 # 弹出最近贮藏并删除\n",[31,1104,1105,1107,1109,1112,1115,1118,1121],{"class":33,"line":84},[31,1106,45],{"class":44},[31,1108,1063],{"class":48},[31,1110,1111],{"class":48}," apply",[31,1113,1114],{"class":48}," stash@{",[31,1116,1117],{"class":52},"0",[31,1119,1120],{"class":48},"}",[31,1122,1123],{"class":37},"     # 应用指定贮藏（保留）\n",[31,1125,1126,1128,1130,1133,1135,1137,1139],{"class":33,"line":90},[31,1127,45],{"class":44},[31,1129,1063],{"class":48},[31,1131,1132],{"class":48}," drop",[31,1134,1114],{"class":48},[31,1136,1117],{"class":52},[31,1138,1120],{"class":48},[31,1140,1141],{"class":37},"      # 删除指定贮藏\n",[31,1143,1144,1146,1148,1151],{"class":33,"line":105},[31,1145,45],{"class":44},[31,1147,1063],{"class":48},[31,1149,1150],{"class":48}," clear",[31,1152,1153],{"class":37},"               # 清空所有贮藏\n",[12,1155,1156],{},"常见场景：改了一半，突然要切分支修 bug。",[16,1158,1160],{"id":1159},"六远程","六、远程",[21,1162,1164],{"className":23,"code":1163,"language":25,"meta":26,"style":26},"git remote -v                 # 查看远程仓库\ngit remote add origin \u003Curl>   # 添加远程\ngit remote set-url origin \u003Curl> # 修改远程地址\ngit remote remove origin      # 删除远程\n\ngit fetch                     # 拉取远程信息，不合并\ngit pull                      # fetch + merge\ngit pull --rebase             # fetch + rebase\ngit push                      # 推送\ngit push -u origin \u003Cbranch>   # 首次推送并建立跟踪\ngit push --force-with-lease   # 安全强推（推荐）\ngit push --force              # 强推（危险）\n",[28,1165,1166,1179,1203,1225,1239,1243,1253,1262,1274,1282,1303,1315],{"__ignoreMap":26},[31,1167,1168,1170,1173,1176],{"class":33,"line":34},[31,1169,45],{"class":44},[31,1171,1172],{"class":48}," remote",[31,1174,1175],{"class":52}," -v",[31,1177,1178],{"class":37},"                 # 查看远程仓库\n",[31,1180,1181,1183,1185,1187,1190,1192,1195,1198,1200],{"class":33,"line":41},[31,1182,45],{"class":44},[31,1184,1172],{"class":48},[31,1186,275],{"class":48},[31,1188,1189],{"class":48}," origin",[31,1191,279],{"class":278},[31,1193,1194],{"class":48},"ur",[31,1196,1197],{"class":285},"l",[31,1199,289],{"class":278},[31,1201,1202],{"class":37},"   # 添加远程\n",[31,1204,1205,1207,1209,1212,1214,1216,1218,1220,1222],{"class":33,"line":62},[31,1206,45],{"class":44},[31,1208,1172],{"class":48},[31,1210,1211],{"class":48}," set-url",[31,1213,1189],{"class":48},[31,1215,279],{"class":278},[31,1217,1194],{"class":48},[31,1219,1197],{"class":285},[31,1221,289],{"class":278},[31,1223,1224],{"class":37}," # 修改远程地址\n",[31,1226,1227,1229,1231,1234,1236],{"class":33,"line":77},[31,1228,45],{"class":44},[31,1230,1172],{"class":48},[31,1232,1233],{"class":48}," remove",[31,1235,1189],{"class":48},[31,1237,1238],{"class":37},"      # 删除远程\n",[31,1240,1241],{"class":33,"line":84},[31,1242,81],{"emptyLinePlaceholder":80},[31,1244,1245,1247,1250],{"class":33,"line":90},[31,1246,45],{"class":44},[31,1248,1249],{"class":48}," fetch",[31,1251,1252],{"class":37},"                     # 拉取远程信息，不合并\n",[31,1254,1255,1257,1259],{"class":33,"line":105},[31,1256,45],{"class":44},[31,1258,363],{"class":48},[31,1260,1261],{"class":37},"                      # fetch + merge\n",[31,1263,1264,1266,1268,1271],{"class":33,"line":110},[31,1265,45],{"class":44},[31,1267,363],{"class":48},[31,1269,1270],{"class":52}," --rebase",[31,1272,1273],{"class":37},"             # fetch + rebase\n",[31,1275,1276,1278,1280],{"class":33,"line":116},[31,1277,45],{"class":44},[31,1279,353],{"class":48},[31,1281,356],{"class":37},[31,1283,1284,1286,1288,1290,1292,1294,1296,1298,1300],{"class":33,"line":131},[31,1285,45],{"class":44},[31,1287,353],{"class":48},[31,1289,1075],{"class":52},[31,1291,1189],{"class":48},[31,1293,279],{"class":278},[31,1295,648],{"class":48},[31,1297,651],{"class":285},[31,1299,289],{"class":278},[31,1301,1302],{"class":37},"   # 首次推送并建立跟踪\n",[31,1304,1305,1307,1309,1312],{"class":33,"line":136},[31,1306,45],{"class":44},[31,1308,353],{"class":48},[31,1310,1311],{"class":52}," --force-with-lease",[31,1313,1314],{"class":37},"   # 安全强推（推荐）\n",[31,1316,1317,1319,1321,1324],{"class":33,"line":142},[31,1318,45],{"class":44},[31,1320,353],{"class":48},[31,1322,1323],{"class":52}," --force",[31,1325,1326],{"class":37},"              # 强推（危险）\n",[711,1328,1329],{},[12,1330,1331,1334,1335,1338],{},[716,1332,1333],{},"强推原则","：永远用 ",[28,1336,1337],{},"--force-with-lease","，它会检查远程是否有人推过新提交，避免误覆盖别人的工作。",[16,1340,1342],{"id":1341},"七标签","七、标签",[21,1344,1346],{"className":23,"code":1345,"language":25,"meta":26,"style":26},"git tag                       # 查看标签\ngit tag v1.0.0                # 轻量标签\ngit tag -a v1.0.0 -m \"msg\"    # 附注标签（推荐）\ngit push origin v1.0.0        # 推送单个标签\ngit push --tags               # 推送所有标签\ngit tag -d v1.0.0             # 删除本地标签\ngit push origin :refs\u002Ftags\u002Fv1.0.0  # 删除远程标签\n",[28,1347,1348,1358,1370,1388,1401,1413,1426],{"__ignoreMap":26},[31,1349,1350,1352,1355],{"class":33,"line":34},[31,1351,45],{"class":44},[31,1353,1354],{"class":48}," tag",[31,1356,1357],{"class":37},"                       # 查看标签\n",[31,1359,1360,1362,1364,1367],{"class":33,"line":41},[31,1361,45],{"class":44},[31,1363,1354],{"class":48},[31,1365,1366],{"class":48}," v1.0.0",[31,1368,1369],{"class":37},"                # 轻量标签\n",[31,1371,1372,1374,1376,1378,1380,1382,1385],{"class":33,"line":62},[31,1373,45],{"class":44},[31,1375,1354],{"class":48},[31,1377,465],{"class":52},[31,1379,1366],{"class":48},[31,1381,326],{"class":52},[31,1383,1384],{"class":48}," \"msg\"",[31,1386,1387],{"class":37},"    # 附注标签（推荐）\n",[31,1389,1390,1392,1394,1396,1398],{"class":33,"line":77},[31,1391,45],{"class":44},[31,1393,353],{"class":48},[31,1395,1189],{"class":48},[31,1397,1366],{"class":48},[31,1399,1400],{"class":37},"        # 推送单个标签\n",[31,1402,1403,1405,1407,1410],{"class":33,"line":84},[31,1404,45],{"class":44},[31,1406,353],{"class":48},[31,1408,1409],{"class":52}," --tags",[31,1411,1412],{"class":37},"               # 推送所有标签\n",[31,1414,1415,1417,1419,1421,1423],{"class":33,"line":90},[31,1416,45],{"class":44},[31,1418,1354],{"class":48},[31,1420,566],{"class":52},[31,1422,1366],{"class":48},[31,1424,1425],{"class":37},"             # 删除本地标签\n",[31,1427,1428,1430,1432,1434,1437],{"class":33,"line":105},[31,1429,45],{"class":44},[31,1431,353],{"class":48},[31,1433,1189],{"class":48},[31,1435,1436],{"class":48}," :refs\u002Ftags\u002Fv1.0.0",[31,1438,1439],{"class":37},"  # 删除远程标签\n",[16,1441,1443],{"id":1442},"八查看历史","八、查看历史",[21,1445,1447],{"className":23,"code":1446,"language":25,"meta":26,"style":26},"git log                       # 完整日志\ngit log --oneline             # 单行\ngit log --oneline --graph     # 图形化\ngit log -p \u003Cfile>             # 查看某文件历史\ngit log --author=\"name\"       # 按作者过滤\ngit log --since=\"2 weeks ago\" # 按时间过滤\ngit log -S \"keyword\"          # 按内容变化搜索（pickaxe）\ngit blame \u003Cfile>              # 逐行查看最后修改者\ngit show \u003Ccommit>             # 查看某次提交详情\n",[28,1448,1449,1459,1471,1485,1505,1520,1535,1550,1568],{"__ignoreMap":26},[31,1450,1451,1453,1456],{"class":33,"line":34},[31,1452,45],{"class":44},[31,1454,1455],{"class":48}," log",[31,1457,1458],{"class":37},"                       # 完整日志\n",[31,1460,1461,1463,1465,1468],{"class":33,"line":41},[31,1462,45],{"class":44},[31,1464,1455],{"class":48},[31,1466,1467],{"class":52}," --oneline",[31,1469,1470],{"class":37},"             # 单行\n",[31,1472,1473,1475,1477,1479,1482],{"class":33,"line":62},[31,1474,45],{"class":44},[31,1476,1455],{"class":48},[31,1478,1467],{"class":52},[31,1480,1481],{"class":52}," --graph",[31,1483,1484],{"class":37},"     # 图形化\n",[31,1486,1487,1489,1491,1494,1496,1498,1500,1502],{"class":33,"line":77},[31,1488,45],{"class":44},[31,1490,1455],{"class":48},[31,1492,1493],{"class":52}," -p",[31,1495,279],{"class":278},[31,1497,282],{"class":48},[31,1499,286],{"class":285},[31,1501,289],{"class":278},[31,1503,1504],{"class":37},"             # 查看某文件历史\n",[31,1506,1507,1509,1511,1514,1517],{"class":33,"line":84},[31,1508,45],{"class":44},[31,1510,1455],{"class":48},[31,1512,1513],{"class":52}," --author=",[31,1515,1516],{"class":48},"\"name\"",[31,1518,1519],{"class":37},"       # 按作者过滤\n",[31,1521,1522,1524,1526,1529,1532],{"class":33,"line":90},[31,1523,45],{"class":44},[31,1525,1455],{"class":48},[31,1527,1528],{"class":52}," --since=",[31,1530,1531],{"class":48},"\"2 weeks ago\"",[31,1533,1534],{"class":37}," # 按时间过滤\n",[31,1536,1537,1539,1541,1544,1547],{"class":33,"line":105},[31,1538,45],{"class":44},[31,1540,1455],{"class":48},[31,1542,1543],{"class":52}," -S",[31,1545,1546],{"class":48}," \"keyword\"",[31,1548,1549],{"class":37},"          # 按内容变化搜索（pickaxe）\n",[31,1551,1552,1554,1557,1559,1561,1563,1565],{"class":33,"line":110},[31,1553,45],{"class":44},[31,1555,1556],{"class":48}," blame",[31,1558,279],{"class":278},[31,1560,282],{"class":48},[31,1562,286],{"class":285},[31,1564,289],{"class":278},[31,1566,1567],{"class":37},"              # 逐行查看最后修改者\n",[31,1569,1570,1572,1575,1577,1580,1583,1585],{"class":33,"line":116},[31,1571,45],{"class":44},[31,1573,1574],{"class":48}," show",[31,1576,279],{"class":278},[31,1578,1579],{"class":48},"commi",[31,1581,1582],{"class":285},"t",[31,1584,289],{"class":278},[31,1586,1587],{"class":37},"             # 查看某次提交详情\n",[16,1589,1591],{"id":1590},"九常见问题","九、常见问题",[368,1593,1595],{"id":1594},"_1-提交信息写错了未推送","1. 提交信息写错了（未推送）",[21,1597,1599],{"className":23,"code":1598,"language":25,"meta":26,"style":26},"git commit --amend -m \"new message\"\n",[28,1600,1601],{"__ignoreMap":26},[31,1602,1603,1605,1607,1610,1612],{"class":33,"line":34},[31,1604,45],{"class":44},[31,1606,323],{"class":48},[31,1608,1609],{"class":52}," --amend",[31,1611,326],{"class":52},[31,1613,1614],{"class":48}," \"new message\"\n",[12,1616,1617],{},"如果只是想补充文件：",[21,1619,1621],{"className":23,"code":1620,"language":25,"meta":26,"style":26},"git add forgotten.txt\ngit commit --amend --no-edit\n",[28,1622,1623,1632],{"__ignoreMap":26},[31,1624,1625,1627,1629],{"class":33,"line":34},[31,1626,45],{"class":44},[31,1628,275],{"class":48},[31,1630,1631],{"class":48}," forgotten.txt\n",[31,1633,1634,1636,1638,1640],{"class":33,"line":41},[31,1635,45],{"class":44},[31,1637,323],{"class":48},[31,1639,1609],{"class":52},[31,1641,1642],{"class":52}," --no-edit\n",[368,1644,1646],{"id":1645},"_2-提交到了错误的分支","2. 提交到了错误的分支",[21,1648,1650],{"className":23,"code":1649,"language":25,"meta":26,"style":26},"# 假设应该提交到 feature 分支，却提交到了 main\ngit branch feature                # 在当前位置创建分支\ngit reset --hard HEAD~1           # main 回退\ngit switch feature                # 切到 feature\n",[28,1651,1652,1657,1669,1682],{"__ignoreMap":26},[31,1653,1654],{"class":33,"line":34},[31,1655,1656],{"class":37},"# 假设应该提交到 feature 分支，却提交到了 main\n",[31,1658,1659,1661,1663,1666],{"class":33,"line":41},[31,1660,45],{"class":44},[31,1662,453],{"class":48},[31,1664,1665],{"class":48}," feature",[31,1667,1668],{"class":37},"                # 在当前位置创建分支\n",[31,1670,1671,1673,1675,1677,1679],{"class":33,"line":62},[31,1672,45],{"class":44},[31,1674,891],{"class":48},[31,1676,971],{"class":52},[31,1678,950],{"class":48},[31,1680,1681],{"class":37},"           # main 回退\n",[31,1683,1684,1686,1688,1690],{"class":33,"line":77},[31,1685,45],{"class":44},[31,1687,505],{"class":48},[31,1689,1665],{"class":48},[31,1691,1692],{"class":37},"                # 切到 feature\n",[368,1694,1696],{"id":1695},"_3-本地分支落后想同步远程","3. 本地分支落后，想同步远程",[21,1698,1700],{"className":23,"code":1699,"language":25,"meta":26,"style":26},"git fetch origin\ngit rebase origin\u002Fmain\n# 或者\ngit pull --rebase origin main\n",[28,1701,1702,1711,1720,1725],{"__ignoreMap":26},[31,1703,1704,1706,1708],{"class":33,"line":34},[31,1705,45],{"class":44},[31,1707,1249],{"class":48},[31,1709,1710],{"class":48}," origin\n",[31,1712,1713,1715,1717],{"class":33,"line":41},[31,1714,45],{"class":44},[31,1716,683],{"class":48},[31,1718,1719],{"class":48}," origin\u002Fmain\n",[31,1721,1722],{"class":33,"line":62},[31,1723,1724],{"class":37},"# 或者\n",[31,1726,1727,1729,1731,1733,1735],{"class":33,"line":77},[31,1728,45],{"class":44},[31,1730,363],{"class":48},[31,1732,1270],{"class":52},[31,1734,1189],{"class":48},[31,1736,154],{"class":48},[368,1738,1740],{"id":1739},"_4-合并冲突","4. 合并冲突",[21,1742,1744],{"className":23,"code":1743,"language":25,"meta":26,"style":26},"git status                        # 查看冲突文件\n# 手动编辑冲突文件，删除 \u003C\u003C\u003C\u003C\u003C\u003C\u003C ======= >>>>>>> 标记\ngit add \u003Cresolved-file>\ngit commit                        # 或 git rebase --continue\n",[28,1745,1746,1755,1760,1775],{"__ignoreMap":26},[31,1747,1748,1750,1752],{"class":33,"line":34},[31,1749,45],{"class":44},[31,1751,265],{"class":48},[31,1753,1754],{"class":37},"                        # 查看冲突文件\n",[31,1756,1757],{"class":33,"line":41},[31,1758,1759],{"class":37},"# 手动编辑冲突文件，删除 \u003C\u003C\u003C\u003C\u003C\u003C\u003C ======= >>>>>>> 标记\n",[31,1761,1762,1764,1766,1768,1771,1773],{"class":33,"line":62},[31,1763,45],{"class":44},[31,1765,275],{"class":48},[31,1767,279],{"class":278},[31,1769,1770],{"class":48},"resolved-fil",[31,1772,286],{"class":285},[31,1774,999],{"class":278},[31,1776,1777,1779,1781],{"class":33,"line":77},[31,1778,45],{"class":44},[31,1780,323],{"class":48},[31,1782,1783],{"class":37},"                        # 或 git rebase --continue\n",[12,1785,1786],{},"放弃合并：",[21,1788,1790],{"className":23,"code":1789,"language":25,"meta":26,"style":26},"git merge --abort\ngit rebase --abort\n",[28,1791,1792,1801],{"__ignoreMap":26},[31,1793,1794,1796,1798],{"class":33,"line":34},[31,1795,45],{"class":44},[31,1797,643],{"class":48},[31,1799,1800],{"class":52}," --abort\n",[31,1802,1803,1805,1807],{"class":33,"line":41},[31,1804,45],{"class":44},[31,1806,683],{"class":48},[31,1808,1800],{"class":52},[368,1810,1812],{"id":1811},"_5-不小心提交了敏感信息","5. 不小心提交了敏感信息",[12,1814,1815,1816,1819,1820,1823],{},"如果还没推送，",[28,1817,1818],{},"git reset --hard"," 即可。",[1821,1822],"br",{},"\n如果已推送，必须改写历史：",[21,1825,1827],{"className":23,"code":1826,"language":25,"meta":26,"style":26},"git filter-repo --path secrets.txt --invert-paths\ngit push --force-with-lease\n",[28,1828,1829,1845],{"__ignoreMap":26},[31,1830,1831,1833,1836,1839,1842],{"class":33,"line":34},[31,1832,45],{"class":44},[31,1834,1835],{"class":48}," filter-repo",[31,1837,1838],{"class":52}," --path",[31,1840,1841],{"class":48}," secrets.txt",[31,1843,1844],{"class":52}," --invert-paths\n",[31,1846,1847,1849,1851],{"class":33,"line":41},[31,1848,45],{"class":44},[31,1850,353],{"class":48},[31,1852,1853],{"class":52}," --force-with-lease\n",[12,1855,1856],{},"同时立即更换泄露的密钥，因为 Git 服务器可能仍留有副本。",[368,1858,1860],{"id":1859},"_6-忽略文件不生效","6. 忽略文件不生效",[21,1862,1864],{"className":23,"code":1863,"language":25,"meta":26,"style":26},"git rm -r --cached .\ngit add .\ngit commit -m \"fix gitignore\"\n",[28,1865,1866,1882,1890],{"__ignoreMap":26},[31,1867,1868,1870,1873,1876,1879],{"class":33,"line":34},[31,1869,45],{"class":44},[31,1871,1872],{"class":48}," rm",[31,1874,1875],{"class":52}," -r",[31,1877,1878],{"class":52}," --cached",[31,1880,1881],{"class":48}," .\n",[31,1883,1884,1886,1888],{"class":33,"line":41},[31,1885,45],{"class":44},[31,1887,275],{"class":48},[31,1889,1881],{"class":48},[31,1891,1892,1894,1896,1898],{"class":33,"line":62},[31,1893,45],{"class":44},[31,1895,323],{"class":48},[31,1897,326],{"class":52},[31,1899,1900],{"class":48}," \"fix gitignore\"\n",[12,1902,1903,1906,1907,1910],{},[28,1904,1905],{},".gitignore"," 只对未跟踪文件生效，已跟踪的文件需要先 ",[28,1908,1909],{},"rm --cached","。",[16,1912,1914],{"id":1913},"十提交规范conventional-commits","十、提交规范（Conventional Commits）",[21,1916,1921],{"className":1917,"code":1919,"language":1920},[1918],"language-text","\u003Ctype>(\u003Cscope>): \u003Csubject>\n\n\u003Cbody>\n\n\u003Cfooter>\n","text",[28,1922,1919],{"__ignoreMap":26},[12,1924,1925],{},"常用 type：",[728,1927,1928,1938],{},[731,1929,1930],{},[734,1931,1932,1935],{},[737,1933,1934],{},"type",[737,1936,1937],{},"说明",[750,1939,1940,1950,1960,1970,1980,1990,2000,2010],{},[734,1941,1942,1947],{},[755,1943,1944],{},[28,1945,1946],{},"feat",[755,1948,1949],{},"新功能",[734,1951,1952,1957],{},[755,1953,1954],{},[28,1955,1956],{},"fix",[755,1958,1959],{},"修复 bug",[734,1961,1962,1967],{},[755,1963,1964],{},[28,1965,1966],{},"docs",[755,1968,1969],{},"文档变更",[734,1971,1972,1977],{},[755,1973,1974],{},[28,1975,1976],{},"style",[755,1978,1979],{},"格式调整（不影响代码逻辑）",[734,1981,1982,1987],{},[755,1983,1984],{},[28,1985,1986],{},"refactor",[755,1988,1989],{},"重构",[734,1991,1992,1997],{},[755,1993,1994],{},[28,1995,1996],{},"perf",[755,1998,1999],{},"性能优化",[734,2001,2002,2007],{},[755,2003,2004],{},[28,2005,2006],{},"test",[755,2008,2009],{},"测试相关",[734,2011,2012,2017],{},[755,2013,2014],{},[28,2015,2016],{},"chore",[755,2018,2019],{},"构建 \u002F 工具 \u002F 依赖变更",[12,2021,2022],{},"示例：",[21,2024,2027],{"className":2025,"code":2026,"language":1920},[1918],"feat(auth): 支持 OAuth 2.0 登录\n\n- 新增 GitHub \u002F Google 登录入口\n- 补充 token 刷新逻辑\n\nCloses #123\n",[28,2028,2026],{"__ignoreMap":26},[16,2030,2032],{"id":2031},"十一实用技巧","十一、实用技巧",[21,2034,2036],{"className":23,"code":2035,"language":25,"meta":26,"style":26},"# 快速查看某文件的最后一次修改\ngit log -1 --stat \u003Cfile>\n\n# 查找是哪次提交引入了某个字符串\ngit log -S \"search-string\" --source --all\n\n# 查看两个分支的共同祖先\ngit merge-base main feature\n\n# 比较工作区和某个提交\ngit diff \u003Ccommit>\n\n# 临时切换到某个提交查看，不切分支\ngit switch --detach \u003Ccommit>\n\n# 查看暂存区的具体内容\ngit diff --staged\n\n# 统计每个作者的提交数\ngit shortlog -sn\n\n# 找出未被合并的分支\ngit branch --no-merged\n",[28,2037,2038,2043,2063,2067,2072,2089,2093,2098,2111,2115,2120,2134,2138,2143,2160,2164,2169,2178,2182,2187,2197,2201,2207],{"__ignoreMap":26},[31,2039,2040],{"class":33,"line":34},[31,2041,2042],{"class":37},"# 快速查看某文件的最后一次修改\n",[31,2044,2045,2047,2049,2052,2055,2057,2059,2061],{"class":33,"line":41},[31,2046,45],{"class":44},[31,2048,1455],{"class":48},[31,2050,2051],{"class":52}," -1",[31,2053,2054],{"class":52}," --stat",[31,2056,279],{"class":278},[31,2058,282],{"class":48},[31,2060,286],{"class":285},[31,2062,999],{"class":278},[31,2064,2065],{"class":33,"line":62},[31,2066,81],{"emptyLinePlaceholder":80},[31,2068,2069],{"class":33,"line":77},[31,2070,2071],{"class":37},"# 查找是哪次提交引入了某个字符串\n",[31,2073,2074,2076,2078,2080,2083,2086],{"class":33,"line":84},[31,2075,45],{"class":44},[31,2077,1455],{"class":48},[31,2079,1543],{"class":52},[31,2081,2082],{"class":48}," \"search-string\"",[31,2084,2085],{"class":52}," --source",[31,2087,2088],{"class":52}," --all\n",[31,2090,2091],{"class":33,"line":90},[31,2092,81],{"emptyLinePlaceholder":80},[31,2094,2095],{"class":33,"line":105},[31,2096,2097],{"class":37},"# 查看两个分支的共同祖先\n",[31,2099,2100,2102,2105,2108],{"class":33,"line":110},[31,2101,45],{"class":44},[31,2103,2104],{"class":48}," merge-base",[31,2106,2107],{"class":48}," main",[31,2109,2110],{"class":48}," feature\n",[31,2112,2113],{"class":33,"line":116},[31,2114,81],{"emptyLinePlaceholder":80},[31,2116,2117],{"class":33,"line":131},[31,2118,2119],{"class":37},"# 比较工作区和某个提交\n",[31,2121,2122,2124,2126,2128,2130,2132],{"class":33,"line":136},[31,2123,45],{"class":44},[31,2125,382],{"class":48},[31,2127,279],{"class":278},[31,2129,1579],{"class":48},[31,2131,1582],{"class":285},[31,2133,999],{"class":278},[31,2135,2136],{"class":33,"line":142},[31,2137,81],{"emptyLinePlaceholder":80},[31,2139,2140],{"class":33,"line":157},[31,2141,2142],{"class":37},"# 临时切换到某个提交查看，不切分支\n",[31,2144,2145,2147,2149,2152,2154,2156,2158],{"class":33,"line":162},[31,2146,45],{"class":44},[31,2148,505],{"class":48},[31,2150,2151],{"class":52}," --detach",[31,2153,279],{"class":278},[31,2155,1579],{"class":48},[31,2157,1582],{"class":285},[31,2159,999],{"class":278},[31,2161,2162],{"class":33,"line":168},[31,2163,81],{"emptyLinePlaceholder":80},[31,2165,2166],{"class":33,"line":183},[31,2167,2168],{"class":37},"# 查看暂存区的具体内容\n",[31,2170,2171,2173,2175],{"class":33,"line":198},[31,2172,45],{"class":44},[31,2174,382],{"class":48},[31,2176,2177],{"class":52}," --staged\n",[31,2179,2180],{"class":33,"line":213},[31,2181,81],{"emptyLinePlaceholder":80},[31,2183,2184],{"class":33,"line":228},[31,2185,2186],{"class":37},"# 统计每个作者的提交数\n",[31,2188,2189,2191,2194],{"class":33,"line":233},[31,2190,45],{"class":44},[31,2192,2193],{"class":48}," shortlog",[31,2195,2196],{"class":52}," -sn\n",[31,2198,2199],{"class":33,"line":239},[31,2200,81],{"emptyLinePlaceholder":80},[31,2202,2204],{"class":33,"line":2203},22,[31,2205,2206],{"class":37},"# 找出未被合并的分支\n",[31,2208,2210,2212,2214],{"class":33,"line":2209},23,[31,2211,45],{"class":44},[31,2213,453],{"class":48},[31,2215,2216],{"class":52}," --no-merged\n",[16,2218,2220],{"id":2219},"十二配置文件位置","十二、配置文件位置",[728,2222,2223,2233],{},[731,2224,2225],{},[734,2226,2227,2230],{},[737,2228,2229],{},"级别",[737,2231,2232],{},"路径",[750,2234,2235,2250,2264],{},[734,2236,2237,2240],{},[755,2238,2239],{},"系统",[755,2241,2242,2245,2246,2249],{},[28,2243,2244],{},"\u002Fetc\u002Fgitconfig","（Linux）\u002F ",[28,2247,2248],{},"C:\\Program Files\\Git\\etc\\gitconfig","（Windows）",[734,2251,2252,2255],{},[755,2253,2254],{},"全局",[755,2256,2257,2260,2261],{},[28,2258,2259],{},"~\u002F.gitconfig"," \u002F ",[28,2262,2263],{},"%USERPROFILE%\\.gitconfig",[734,2265,2266,2269],{},[755,2267,2268],{},"仓库",[755,2270,2271],{},[28,2272,2273],{},"\u003Crepo>\u002F.git\u002Fconfig",[12,2275,2276],{},"优先级：仓库 > 全局 > 系统。",[2278,2279],"hr",{},[16,2281,2282],{"id":2282},"参考",[2284,2285,2286,2299,2306],"ul",{},[2287,2288,2289,2290],"li",{},"官方文档：",[2291,2292,2293],"a",{"href":2293,"rel":2294,"target":2298},"https:\u002F\u002Fgit-scm.com\u002Fdocs",[2295,2296,2297],"nofollow","noopener","noreferrer","_blank",[2287,2300,2301,2302],{},"Pro Git（中文版）：",[2291,2303,2304],{"href":2304,"rel":2305,"target":2298},"https:\u002F\u002Fgit-scm.com\u002Fbook\u002Fzh\u002Fv2",[2295,2296,2297],[2287,2307,2308,2309],{},"Conventional Commits：",[2291,2310,2311],{"href":2311,"rel":2312,"target":2298},"https:\u002F\u002Fwww.conventionalcommits.org\u002Fzh-hans\u002F",[2295,2296,2297],[1976,2314,2315],{},"html pre.shiki code .snpHw, html code.shiki .snpHw{--shiki-default:#88846F}html pre.shiki code .sHkqI, html code.shiki .sHkqI{--shiki-default:#A6E22E}html pre.shiki code .s_Ekj, html code.shiki .s_Ekj{--shiki-default:#E6DB74}html pre.shiki code .s7s5_, html code.shiki .s7s5_{--shiki-default:#AE81FF}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 pre.shiki code .s8I7P, html code.shiki .s8I7P{--shiki-default:#F92672}html pre.shiki code .sCdxs, html code.shiki .sCdxs{--shiki-default:#F8F8F2}",{"title":26,"searchDepth":41,"depth":41,"links":2317},[2318,2319,2322,2325,2331,2332,2333,2334,2335,2343,2344,2345,2346],{"id":18,"depth":41,"text":19},{"id":252,"depth":41,"text":253,"children":2320},[2321],{"id":370,"depth":62,"text":370},{"id":440,"depth":41,"text":441,"children":2323},[2324],{"id":631,"depth":62,"text":631},{"id":722,"depth":41,"text":723,"children":2326},[2327,2328,2329,2330],{"id":803,"depth":62,"text":803},{"id":860,"depth":62,"text":860},{"id":907,"depth":62,"text":907},{"id":1002,"depth":62,"text":1002},{"id":1050,"depth":41,"text":1051},{"id":1159,"depth":41,"text":1160},{"id":1341,"depth":41,"text":1342},{"id":1442,"depth":41,"text":1443},{"id":1590,"depth":41,"text":1591,"children":2336},[2337,2338,2339,2340,2341,2342],{"id":1594,"depth":62,"text":1595},{"id":1645,"depth":62,"text":1646},{"id":1695,"depth":62,"text":1696},{"id":1739,"depth":62,"text":1740},{"id":1811,"depth":62,"text":1812},{"id":1859,"depth":62,"text":1860},{"id":1913,"depth":41,"text":1914},{"id":2031,"depth":41,"text":2032},{"id":2219,"depth":41,"text":2220},{"id":2282,"depth":41,"text":2282},"2026-09-25","md",{},"\u002Fgit-memo-2026-09-25",{"title":6,"description":14},"git-memo-2026-09-25",[2354,2355],"Git","备忘录","0H9pi2QAc8Lw_Eh4bdHwdkFMYOEf4495Ze_IMkWMpDk",1794733995734]