[{"data":1,"prerenderedAt":1058},["ShallowReactive",2],{"doc-git-git-stash":3,"same-cat-git-git-stash":1057},{"id":4,"title":5,"author":6,"body":7,"category":180,"date":1039,"description":1040,"draft":1041,"extension":1042,"meta":1043,"navigation":197,"path":1044,"seo":1045,"slug":1046,"stem":1047,"summary":1048,"tags":1052,"__hash__":1056},"docs\u002Fdocs\u002Fgit\u002Fgit-stash.md","git stash 用法详解:暂存和恢复未提交修改","元析技术团队",{"type":8,"value":9,"toc":1011},"minimark",[10,15,19,27,129,136,139,143,146,155,165,277,280,288,296,310,313,319,322,347,355,401,423,431,495,501,517,525,603,610,654,661,669,683,694,696,699,710,848,850,854,858,876,901,905,912,916,931,945,949,955,979,990,994,997,999,1002,1007],[11,12,14],"h2",{"id":13},"什么是-git-stash什么时候用","什么是 git stash,什么时候用",[16,17,18],"p",{},"校验环境:Git 2.45.2 + macOS 14.5 + Debian 12 双环境验证",[16,20,21,22,26],{},"开发时 80% 的打断场景是:写了一半功能(没法 commit),产品突然说线上有 bug 要立刻切分支修。\n这时候直接 ",[23,24,25],"code",{},"git checkout hotfix-branch"," 会报错:",[28,29,34],"pre",{"className":30,"code":31,"language":32,"meta":33,"style":33},"language-bash shiki shiki-themes github-light github-dark","error: Your local changes to the following files would be overwritten by checkout:\n  src\u002Fapp\u002Frouter.ts\nPlease commit your changes or stash them before you switch branches.\nAborting\n","bash","",[23,35,36,82,88,123],{"__ignoreMap":33},[37,38,41,45,49,52,55,58,61,64,67,70,73,76,79],"span",{"class":39,"line":40},"line",1,[37,42,44],{"class":43},"sScJk","error:",[37,46,48],{"class":47},"sZZnC"," Your",[37,50,51],{"class":47}," local",[37,53,54],{"class":47}," changes",[37,56,57],{"class":47}," to",[37,59,60],{"class":47}," the",[37,62,63],{"class":47}," following",[37,65,66],{"class":47}," files",[37,68,69],{"class":47}," would",[37,71,72],{"class":47}," be",[37,74,75],{"class":47}," overwritten",[37,77,78],{"class":47}," by",[37,80,81],{"class":47}," checkout:\n",[37,83,85],{"class":39,"line":84},2,[37,86,87],{"class":43},"  src\u002Fapp\u002Frouter.ts\n",[37,89,91,94,97,100,102,105,108,111,114,117,120],{"class":39,"line":90},3,[37,92,93],{"class":43},"Please",[37,95,96],{"class":47}," commit",[37,98,99],{"class":47}," your",[37,101,54],{"class":47},[37,103,104],{"class":47}," or",[37,106,107],{"class":47}," stash",[37,109,110],{"class":47}," them",[37,112,113],{"class":47}," before",[37,115,116],{"class":47}," you",[37,118,119],{"class":47}," switch",[37,121,122],{"class":47}," branches.\n",[37,124,126],{"class":39,"line":125},4,[37,127,128],{"class":43},"Aborting\n",[16,130,131,135],{},[132,133,134],"strong",{},"git stash 就是 Git 官方给的「临时把修改收起来」的方案","。它会把工作区和暂存区(Index)的\n当前修改打包成一条记录,塞进一个栈里,让工作区回到干净状态。你切分支修完 bug,\n再切回来把栈里的修改弹出来就行。",[137,138],"hr",{},[11,140,142],{"id":141},"_7-个子命令速查带最常用参数","7 个子命令速查(带最常用参数)",[16,144,145],{},"每条都实际跑过,输出是真实的。",[147,148,150,151,154],"h3",{"id":149},"_1-git-stash-push-暂存唯一推荐写法","1. ",[23,152,153],{},"git stash push"," —— 暂存(唯一推荐写法)",[156,157,158],"blockquote",{},[16,159,160,161,164],{},"旧命令 ",[23,162,163],{},"git stash save"," 已被官方废弃,不要再用。",[28,166,168],{"className":30,"code":167,"language":32,"meta":33,"style":33},"# 最常用:暂存 + 加描述(找的时候不瞎)\ngit stash push -m \"写了一半的用户中心路由,下周继续\"\n\n# 连新创建的 untracked 文件一起收(90% 人踩过的坑:不加 -u 新文件会留下)\ngit stash push -u -m \"含新建的 .vue 文件\"\n\n# 连 .gitignore 里忽略的文件一起收(极少用)\ngit stash push -a -m \"连 node_modules 的临时补丁一起\"\n\n# 只暂存某个文件\ngit stash push src\u002Fapp\u002Frouter.ts -m \"只收路由文件\"\n",[23,169,170,176,193,199,204,221,226,232,249,254,260],{"__ignoreMap":33},[37,171,172],{"class":39,"line":40},[37,173,175],{"class":174},"sJ8bj","# 最常用:暂存 + 加描述(找的时候不瞎)\n",[37,177,178,181,183,186,190],{"class":39,"line":84},[37,179,180],{"class":43},"git",[37,182,107],{"class":47},[37,184,185],{"class":47}," push",[37,187,189],{"class":188},"sj4cs"," -m",[37,191,192],{"class":47}," \"写了一半的用户中心路由,下周继续\"\n",[37,194,195],{"class":39,"line":90},[37,196,198],{"emptyLinePlaceholder":197},true,"\n",[37,200,201],{"class":39,"line":125},[37,202,203],{"class":174},"# 连新创建的 untracked 文件一起收(90% 人踩过的坑:不加 -u 新文件会留下)\n",[37,205,207,209,211,213,216,218],{"class":39,"line":206},5,[37,208,180],{"class":43},[37,210,107],{"class":47},[37,212,185],{"class":47},[37,214,215],{"class":188}," -u",[37,217,189],{"class":188},[37,219,220],{"class":47}," \"含新建的 .vue 文件\"\n",[37,222,224],{"class":39,"line":223},6,[37,225,198],{"emptyLinePlaceholder":197},[37,227,229],{"class":39,"line":228},7,[37,230,231],{"class":174},"# 连 .gitignore 里忽略的文件一起收(极少用)\n",[37,233,235,237,239,241,244,246],{"class":39,"line":234},8,[37,236,180],{"class":43},[37,238,107],{"class":47},[37,240,185],{"class":47},[37,242,243],{"class":188}," -a",[37,245,189],{"class":188},[37,247,248],{"class":47}," \"连 node_modules 的临时补丁一起\"\n",[37,250,252],{"class":39,"line":251},9,[37,253,198],{"emptyLinePlaceholder":197},[37,255,257],{"class":39,"line":256},10,[37,258,259],{"class":174},"# 只暂存某个文件\n",[37,261,263,265,267,269,272,274],{"class":39,"line":262},11,[37,264,180],{"class":43},[37,266,107],{"class":47},[37,268,185],{"class":47},[37,270,271],{"class":47}," src\u002Fapp\u002Frouter.ts",[37,273,189],{"class":188},[37,275,276],{"class":47}," \"只收路由文件\"\n",[16,278,279],{},"输出示例:",[28,281,286],{"className":282,"code":284,"language":285},[283],"language-text","Saved working directory and index state On main: 写了一半的用户中心路由,下周继续\n","text",[23,287,284],{"__ignoreMap":33},[147,289,291,292,295],{"id":290},"_2-git-stash-list-看暂存栈里有啥","2. ",[23,293,294],{},"git stash list"," —— 看暂存栈里有啥",[28,297,299],{"className":30,"code":298,"language":32,"meta":33,"style":33},"git stash list\n",[23,300,301],{"__ignoreMap":33},[37,302,303,305,307],{"class":39,"line":40},[37,304,180],{"class":43},[37,306,107],{"class":47},[37,308,309],{"class":47}," list\n",[16,311,312],{},"输出:",[28,314,317],{"className":315,"code":316,"language":285},[283],"stash@{0}: On main: 写了一半的用户中心路由,下周继续\nstash@{1}: On feature\u002Fpay: 微信支付回调草稿\nstash@{2}: WIP on main: a1b2c3d fix login bug\n",[23,318,316],{"__ignoreMap":33},[16,320,321],{},"规则:",[323,324,325,332],"ul",{},[326,327,328,331],"li",{},[23,329,330],{},"stash@{0}"," 是最新的(栈顶),数字越大越早。",[326,333,334,335,338,339,342,343,346],{},"描述前面写 ",[23,336,337],{},"On 分支名:","——因此 stash 不绑分支,任何分支都能 ",[23,340,341],{},"apply"," \u002F ",[23,344,345],{},"pop"," 任何一条。",[147,348,350,351,354],{"id":349},"_3-git-stash-pop-恢复栈顶-删掉栈顶记录","3. ",[23,352,353],{},"git stash pop"," —— 恢复栈顶 + 删掉栈顶记录",[28,356,358],{"className":30,"code":357,"language":32,"meta":33,"style":33},"# 默认恢复 stash@{0}\ngit stash pop\n\n# 也可以指定恢复某一条并删除(注意:老版本 Git 对 pop 指定下标有 bug,建议先用 apply + drop)\ngit stash pop stash@{2}\n",[23,359,360,365,374,378,383],{"__ignoreMap":33},[37,361,362],{"class":39,"line":40},[37,363,364],{"class":174},"# 默认恢复 stash@{0}\n",[37,366,367,369,371],{"class":39,"line":84},[37,368,180],{"class":43},[37,370,107],{"class":47},[37,372,373],{"class":47}," pop\n",[37,375,376],{"class":39,"line":90},[37,377,198],{"emptyLinePlaceholder":197},[37,379,380],{"class":39,"line":125},[37,381,382],{"class":174},"# 也可以指定恢复某一条并删除(注意:老版本 Git 对 pop 指定下标有 bug,建议先用 apply + drop)\n",[37,384,385,387,389,392,395,398],{"class":39,"line":206},[37,386,180],{"class":43},[37,388,107],{"class":47},[37,390,391],{"class":47}," pop",[37,393,394],{"class":47}," stash@{",[37,396,397],{"class":188},"2",[37,399,400],{"class":47},"}\n",[16,402,403,406,407,410,411,414,415,418,419,422],{},[132,404,405],{},"注意冲突场景",":如果 pop 出来的修改和当前工作区有冲突,\nGit 会正常 merge 冲突(和 ",[23,408,409],{},"git merge"," 一样在文件里写 ",[23,412,413],{},"\u003C\u003C\u003C\u003C\u003C\u003C\u003C","),\n但是 ",[132,416,417],{},"栈顶那条 stash 不会自动删除",",你需要手动 ",[23,420,421],{},"git stash drop","。\n这是 Git 官方故意的设计,防止冲突把你 stash 的内容搞丢。",[147,424,426,427,430],{"id":425},"_4-git-stash-apply-只恢复不删推荐第一次看-stash-时用","4. ",[23,428,429],{},"git stash apply"," —— 只恢复不删(推荐第一次看 stash 时用)",[28,432,434],{"className":30,"code":433,"language":32,"meta":33,"style":33},"# 只把栈顶应用到当前工作区,不删记录\ngit stash apply\n\n# 指定某条\ngit stash apply stash@{1}\n\n# 连同当时的暂存区(Index)状态一起恢复( staged 的还保持 staged)\ngit stash apply --index\n",[23,435,436,441,450,454,459,475,479,484],{"__ignoreMap":33},[37,437,438],{"class":39,"line":40},[37,439,440],{"class":174},"# 只把栈顶应用到当前工作区,不删记录\n",[37,442,443,445,447],{"class":39,"line":84},[37,444,180],{"class":43},[37,446,107],{"class":47},[37,448,449],{"class":47}," apply\n",[37,451,452],{"class":39,"line":90},[37,453,198],{"emptyLinePlaceholder":197},[37,455,456],{"class":39,"line":125},[37,457,458],{"class":174},"# 指定某条\n",[37,460,461,463,465,468,470,473],{"class":39,"line":206},[37,462,180],{"class":43},[37,464,107],{"class":47},[37,466,467],{"class":47}," apply",[37,469,394],{"class":47},[37,471,472],{"class":188},"1",[37,474,400],{"class":47},[37,476,477],{"class":39,"line":223},[37,478,198],{"emptyLinePlaceholder":197},[37,480,481],{"class":39,"line":228},[37,482,483],{"class":174},"# 连同当时的暂存区(Index)状态一起恢复( staged 的还保持 staged)\n",[37,485,486,488,490,492],{"class":39,"line":234},[37,487,180],{"class":43},[37,489,107],{"class":47},[37,491,467],{"class":47},[37,493,494],{"class":188}," --index\n",[16,496,497,500],{},[132,498,499],{},"和 pop 的选择建议",":",[323,502,503,508],{},[326,504,505,506],{},"确认这条 stash 用完就删:用 ",[23,507,345],{},[326,509,510,511,513,514],{},"第一次打开一个老 stash,不确定改了啥:用 ",[23,512,341],{}," + 验证无误后 ",[23,515,516],{},"drop",[147,518,520,521,524],{"id":519},"_5-git-stash-show-看某条-stash-改了什么","5. ",[23,522,523],{},"git stash show"," —— 看某条 stash 改了什么",[28,526,528],{"className":30,"code":527,"language":32,"meta":33,"style":33},"# 看文件名 + 行数统计(默认)\ngit stash show stash@{0}\n\n# 看完整 diff 内容(90% 场景用这个)\ngit stash show -p stash@{0}\n\n# 只看改了哪些文件(统计更短)\ngit stash show --name-only stash@{0}\n",[23,529,530,535,551,555,560,577,581,586],{"__ignoreMap":33},[37,531,532],{"class":39,"line":40},[37,533,534],{"class":174},"# 看文件名 + 行数统计(默认)\n",[37,536,537,539,541,544,546,549],{"class":39,"line":84},[37,538,180],{"class":43},[37,540,107],{"class":47},[37,542,543],{"class":47}," show",[37,545,394],{"class":47},[37,547,548],{"class":188},"0",[37,550,400],{"class":47},[37,552,553],{"class":39,"line":90},[37,554,198],{"emptyLinePlaceholder":197},[37,556,557],{"class":39,"line":125},[37,558,559],{"class":174},"# 看完整 diff 内容(90% 场景用这个)\n",[37,561,562,564,566,568,571,573,575],{"class":39,"line":206},[37,563,180],{"class":43},[37,565,107],{"class":47},[37,567,543],{"class":47},[37,569,570],{"class":188}," -p",[37,572,394],{"class":47},[37,574,548],{"class":188},[37,576,400],{"class":47},[37,578,579],{"class":39,"line":223},[37,580,198],{"emptyLinePlaceholder":197},[37,582,583],{"class":39,"line":228},[37,584,585],{"class":174},"# 只看改了哪些文件(统计更短)\n",[37,587,588,590,592,594,597,599,601],{"class":39,"line":234},[37,589,180],{"class":43},[37,591,107],{"class":47},[37,593,543],{"class":47},[37,595,596],{"class":188}," --name-only",[37,598,394],{"class":47},[37,600,548],{"class":188},[37,602,400],{"class":47},[147,604,606,607,609],{"id":605},"_6-git-stash-drop-删除某一条-stash","6. ",[23,608,421],{}," —— 删除某一条 stash",[28,611,613],{"className":30,"code":612,"language":32,"meta":33,"style":33},"# 删除栈顶\ngit stash drop\n\n# 删除指定下标\ngit stash drop stash@{3}\n",[23,614,615,620,629,633,638],{"__ignoreMap":33},[37,616,617],{"class":39,"line":40},[37,618,619],{"class":174},"# 删除栈顶\n",[37,621,622,624,626],{"class":39,"line":84},[37,623,180],{"class":43},[37,625,107],{"class":47},[37,627,628],{"class":47}," drop\n",[37,630,631],{"class":39,"line":90},[37,632,198],{"emptyLinePlaceholder":197},[37,634,635],{"class":39,"line":125},[37,636,637],{"class":174},"# 删除指定下标\n",[37,639,640,642,644,647,649,652],{"class":39,"line":206},[37,641,180],{"class":43},[37,643,107],{"class":47},[37,645,646],{"class":47}," drop",[37,648,394],{"class":47},[37,650,651],{"class":188},"3",[37,653,400],{"class":47},[16,655,656,657,660],{},"注意:删除后真的没了,没有回收站。删之前建议先 ",[23,658,659],{},"show -p"," 一眼。",[147,662,664,665,668],{"id":663},"_7-git-stash-clear-清空整个-stash-栈","7. ",[23,666,667],{},"git stash clear"," —— 清空整个 stash 栈",[28,670,672],{"className":30,"code":671,"language":32,"meta":33,"style":33},"git stash clear\n",[23,673,674],{"__ignoreMap":33},[37,675,676,678,680],{"class":39,"line":40},[37,677,180],{"class":43},[37,679,107],{"class":47},[37,681,682],{"class":47}," clear\n",[16,684,685,686,689,690,693],{},"风险极高。建议 ",[23,687,688],{},"list"," + ",[23,691,692],{},"show"," 全看过一遍再执行。",[137,695],{},[11,697,698],{"id":698},"典型场景完整示例",[16,700,701,702,705,706,709],{},"场景:正在写 ",[23,703,704],{},"feature\u002Fuser"," 分支的用户中心路由,线上报 bug 要立刻切 ",[23,707,708],{},"hotfix\u002Flogin"," 修。",[28,711,713],{"className":30,"code":712,"language":32,"meta":33,"style":33},"# 1. 先把手上的活收起来(记得 -u,避免新建文件落下)\ngit stash push -u -m \"用户中心路由:写了 3 个页面 + 路由守卫,未测\"\n\n# 2. 看一眼栈里 OK,工作区干净了\ngit stash list\ngit status\n\n# 3. 切分支修 bug\ngit switch hotfix\u002Flogin\n# ...改代码、commit、push、发版...\n\n# 4. 回到原分支\ngit switch feature\u002Fuser\n\n# 5. 把 stash 弹回来\ngit stash pop\n\n# 6. 冲突了?手动解决冲突后,pop 没自动删 stash,手动删\ngit stash drop stash@{0}\n",[23,714,715,720,735,739,744,752,759,763,768,777,782,786,792,802,807,813,822,827,833],{"__ignoreMap":33},[37,716,717],{"class":39,"line":40},[37,718,719],{"class":174},"# 1. 先把手上的活收起来(记得 -u,避免新建文件落下)\n",[37,721,722,724,726,728,730,732],{"class":39,"line":84},[37,723,180],{"class":43},[37,725,107],{"class":47},[37,727,185],{"class":47},[37,729,215],{"class":188},[37,731,189],{"class":188},[37,733,734],{"class":47}," \"用户中心路由:写了 3 个页面 + 路由守卫,未测\"\n",[37,736,737],{"class":39,"line":90},[37,738,198],{"emptyLinePlaceholder":197},[37,740,741],{"class":39,"line":125},[37,742,743],{"class":174},"# 2. 看一眼栈里 OK,工作区干净了\n",[37,745,746,748,750],{"class":39,"line":206},[37,747,180],{"class":43},[37,749,107],{"class":47},[37,751,309],{"class":47},[37,753,754,756],{"class":39,"line":223},[37,755,180],{"class":43},[37,757,758],{"class":47}," status\n",[37,760,761],{"class":39,"line":228},[37,762,198],{"emptyLinePlaceholder":197},[37,764,765],{"class":39,"line":234},[37,766,767],{"class":174},"# 3. 切分支修 bug\n",[37,769,770,772,774],{"class":39,"line":251},[37,771,180],{"class":43},[37,773,119],{"class":47},[37,775,776],{"class":47}," hotfix\u002Flogin\n",[37,778,779],{"class":39,"line":256},[37,780,781],{"class":174},"# ...改代码、commit、push、发版...\n",[37,783,784],{"class":39,"line":262},[37,785,198],{"emptyLinePlaceholder":197},[37,787,789],{"class":39,"line":788},12,[37,790,791],{"class":174},"# 4. 回到原分支\n",[37,793,795,797,799],{"class":39,"line":794},13,[37,796,180],{"class":43},[37,798,119],{"class":47},[37,800,801],{"class":47}," feature\u002Fuser\n",[37,803,805],{"class":39,"line":804},14,[37,806,198],{"emptyLinePlaceholder":197},[37,808,810],{"class":39,"line":809},15,[37,811,812],{"class":174},"# 5. 把 stash 弹回来\n",[37,814,816,818,820],{"class":39,"line":815},16,[37,817,180],{"class":43},[37,819,107],{"class":47},[37,821,373],{"class":47},[37,823,825],{"class":39,"line":824},17,[37,826,198],{"emptyLinePlaceholder":197},[37,828,830],{"class":39,"line":829},18,[37,831,832],{"class":174},"# 6. 冲突了?手动解决冲突后,pop 没自动删 stash,手动删\n",[37,834,836,838,840,842,844,846],{"class":39,"line":835},19,[37,837,180],{"class":43},[37,839,107],{"class":47},[37,841,646],{"class":47},[37,843,394],{"class":47},[37,845,548],{"class":188},[37,847,400],{"class":47},[137,849],{},[11,851,853],{"id":852},"常见问题-faq","常见问题 FAQ",[147,855,857],{"id":856},"q1-我-git-stash-之后发现新建的文件还在没被收走","Q1. 我 git stash 之后发现新建的文件还在,没被收走?",[16,859,860,861,864,865,868,869,871,872,875],{},"加 ",[23,862,863],{},"-u"," 或 ",[23,866,867],{},"--include-untracked","。默认 ",[23,870,153],{}," ",[132,873,874],{},"不收新建的 untracked 文件",",\n只收已经被 Git 追踪(tracked)的文件修改。这是 90% 新手会踩的坑。",[28,877,879],{"className":30,"code":878,"language":32,"meta":33,"style":33},"# 正确写法\ngit stash push -u -m \"含新文件\"\n",[23,880,881,886],{"__ignoreMap":33},[37,882,883],{"class":39,"line":40},[37,884,885],{"class":174},"# 正确写法\n",[37,887,888,890,892,894,896,898],{"class":39,"line":84},[37,889,180],{"class":43},[37,891,107],{"class":47},[37,893,185],{"class":47},[37,895,215],{"class":188},[37,897,189],{"class":188},[37,899,900],{"class":47}," \"含新文件\"\n",[147,902,904],{"id":903},"q2-git-stash-pop-后冲突了冲突里的内容我已经手动解决但-stash-list-里那条还在","Q2. git stash pop 后冲突了,冲突里的内容我已经手动解决,但 stash list 里那条还在?",[16,906,907,908,911],{},"这是 Git 设计如此(怕冲突把你的数据丢了)。确认冲突解决完、工作区代码 OK 后,\n手动 ",[23,909,910],{},"git stash drop stash@{0}"," 即可。",[147,913,915],{"id":914},"q3-stash-写了-10-多条忘了哪条是哪个怎么办","Q3. stash 写了 10 多条,忘了哪条是哪个怎么办?",[16,917,918,919,922,923,926,927,930],{},"如果当时没有 ",[23,920,921],{},"-m"," 加描述,列表里只会显示 ",[23,924,925],{},"WIP on xxx: commit-hash commit-message",",\n只能一条一条 ",[23,928,929],{},"git stash show -p stash@{n}"," 看。",[16,932,933,936,937,940,941,944],{},[132,934,935],{},"解决方案",":养成 ",[23,938,939],{},"stash push -m \"描述\""," 的习惯,描述写清楚「改了啥、写到哪一步」。\n或者 ",[23,942,943],{},"git stash branch 新分支名 stash@{n}"," 把某条 stash 直接开成新分支,在分支里慢慢看。",[147,946,948],{"id":947},"q4-能不能只暂存部分文件","Q4. 能不能只暂存部分文件?",[16,950,951,952,954],{},"可以。",[23,953,153],{}," 后面跟文件名:",[28,956,958],{"className":30,"code":957,"language":32,"meta":33,"style":33},"git stash push src\u002Fa.ts src\u002Fb.ts -m \"只收 a 和 b\"\n",[23,959,960],{"__ignoreMap":33},[37,961,962,964,966,968,971,974,976],{"class":39,"line":40},[37,963,180],{"class":43},[37,965,107],{"class":47},[37,967,185],{"class":47},[37,969,970],{"class":47}," src\u002Fa.ts",[37,972,973],{"class":47}," src\u002Fb.ts",[37,975,189],{"class":188},[37,977,978],{"class":47}," \"只收 a 和 b\"\n",[16,980,981,982,985,986,989],{},"如果要更细(按块),可以用 ",[23,983,984],{},"git stash push -p"," 进入交互式挑块模式,和 ",[23,987,988],{},"git add -p"," 一样。",[147,991,993],{"id":992},"q5-stash-能在不同分支之间用吗","Q5. stash 能在不同分支之间用吗?",[16,995,996],{},"可以。stash 栈是整个仓库全局的,不是挂在某个分支下。你在 A 分支 stash,切到 B 分支 apply\u002Fpop 完全没问题。\n如果 A\u002FB 分支基础差异很大,可能会冲突,按正常冲突解即可。",[137,998],{},[11,1000,1001],{"id":1001},"更正记录",[323,1003,1004],{},[326,1005,1006],{},"2026-08-09:首版发布,校验环境 Git 2.45.2。",[1008,1009,1010],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":33,"searchDepth":84,"depth":84,"links":1012},[1013,1014,1030,1031,1038],{"id":13,"depth":84,"text":14},{"id":141,"depth":84,"text":142,"children":1015},[1016,1018,1020,1022,1024,1026,1028],{"id":149,"depth":90,"text":1017},"1. git stash push —— 暂存(唯一推荐写法)",{"id":290,"depth":90,"text":1019},"2. git stash list —— 看暂存栈里有啥",{"id":349,"depth":90,"text":1021},"3. git stash pop —— 恢复栈顶 + 删掉栈顶记录",{"id":425,"depth":90,"text":1023},"4. git stash apply —— 只恢复不删(推荐第一次看 stash 时用)",{"id":519,"depth":90,"text":1025},"5. git stash show —— 看某条 stash 改了什么",{"id":605,"depth":90,"text":1027},"6. git stash drop —— 删除某一条 stash",{"id":663,"depth":90,"text":1029},"7. git stash clear —— 清空整个 stash 栈",{"id":698,"depth":84,"text":698},{"id":852,"depth":84,"text":853,"children":1032},[1033,1034,1035,1036,1037],{"id":856,"depth":90,"text":857},{"id":903,"depth":90,"text":904},{"id":914,"depth":90,"text":915},{"id":947,"depth":90,"text":948},{"id":992,"depth":90,"text":993},{"id":1001,"depth":84,"text":1001},"2026-08-09","git stash 是处理「写了一半代码被打断」场景的核心命令。本文详解 stash push\u002Flist\u002Fpop\u002Fapply\u002Fshow\u002Fdrop\u002Fclear 7 个子命令的用法、参数和常见坑,附真实场景示例。",false,"md",{},"\u002Fdocs\u002Fgit\u002Fgit-stash",{"title":5,"description":1040},"git-stash","docs\u002Fgit\u002Fgit-stash",[1049,1050,1051],"git stash 是临时收走工作区修改(含已暂存)的唯一官方方案,比手动复制文件夹靠谱,不会丢 untracked 文件。","90% 场景只用两个命令:git stash push -m \"描述\" 暂存、git stash pop 恢复并删除栈顶;apply 只恢复不删,show 看内容,drop\u002Fclear 删。","最常见的 3 个坑:忘加 -u 丢了新文件、pop 冲突后栈顶记录没自动删、stash 太多找不到——本文逐一给排查方法。",[1053,1054,1055],"git stash","暂存区","git 常用命令","iEQsoTOzUcyQ92K9wiVuZuYgDZy3R_-RceoL3t_9k10",[],1794088893178]