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