[{"data":1,"prerenderedAt":304},["ShallowReactive",2],{"content:\u002Fposts\u002Fmerge-upstream-branches":3,"surround:\u002Fposts\u002Fmerge-upstream-branches":294},{"id":4,"title":5,"body":6,"categories":271,"date":273,"description":274,"draft":275,"extension":276,"image":277,"meta":278,"navigation":280,"path":281,"permalink":277,"pinned":275,"published":277,"readingTime":282,"recommend":277,"references":277,"seo":287,"sitemap":288,"stem":289,"tags":290,"type":292,"updated":273,"__hash__":293},"content\u002Fposts\u002Fposts\u002Fmerge-upstream-branches.md","将“上游项目”的更新合并到“我的项目”上",{"type":7,"value":8,"toc":261},"minimark",[9,19,24,36,46,53,67,73,79,85,91,94,100,104,110,116,122,131,137,143,149,155,163,169,175,181,185,196,203,206,214,220,243,249,252,258],[10,11,15],"alert",{"icon":12,"title":13,"type":14},"tabler:robot","AI 迁移提示","info",[16,17,18],"p",{},"本文由 AI 协助从旧站迁移，尚未完成逐篇人工审校；内容如有疏漏，将在复核后修订。",[20,21,23],"h2",{"id":22},"一添加上游项目的本地分支索引","一、添加上游项目的本地分支索引",[16,25,26,27,31,32,35],{},"1、从名为 ",[28,29,30],"code",{"code":30},"upstream","的远程仓库拉取 ",[28,33,34],{"code":34},"master","分支的最新信息到本地",[37,38,44],"pre",{"className":39,"code":41,"language":42,"meta":43},[40],"language-bash","git fetch upstream master\n","bash","",[28,45,41],{"__ignoreMap":43},[16,47,48,49,52],{},"此操作只会更新本地仓库的远程分支索引（如 ",[28,50,51],{"code":51},"upstream\u002Fmaster","），不会自动修改你本地任何分支上的文件",[16,54,55,56,59,60,63,64,66],{},"2、使用 ",[28,57,58],{"code":58},"--force","选项，强制创建一个名为 ",[28,61,62],{"code":62},"master-upstream","的新本地分支（如果已存在则重置），并让其指向 ",[28,65,51],{"code":51},"所对应的提交",[37,68,71],{"className":69,"code":70,"language":42,"meta":43},[40],"git branch --force master-upstream upstream\u002Fmaster\n",[28,72,70],{"__ignoreMap":43},[16,74,75,76,78],{},"这个分支相当于当前上游 ",[28,77,34],{"code":34},"分支状态的一个快照。",[16,80,81,82,84],{},"3、列出所有名称匹配 ",[28,83,62],{"code":62},"的分支",[37,86,89],{"className":87,"code":88,"language":42,"meta":43},[40],"git branch --list master-upstream\n",[28,90,88],{"__ignoreMap":43},[16,92,93],{},"4、显示 master-upstream分支最近的10条提交记录",[37,95,98],{"className":96,"code":97,"language":42,"meta":43},[40],"git log --oneline master-upstream -n 10\n",[28,99,97],{"__ignoreMap":43},[20,101,103],{"id":102},"二上游项目的更新","二、上游项目的更新",[16,105,106,107,109],{},"1、将上游仓库为",[28,108,30],{"code":30},"的最新提交记录拉到本地",[37,111,114],{"className":112,"code":113,"language":42,"meta":43},[40],"git fetch upstream\n",[28,115,113],{"__ignoreMap":43},[16,117,118,119,121],{},"更新所有远程跟踪分支（包括 ",[28,120,51],{"code":51},"），但不会改动任何本地分支的工作内容。",[16,123,124,125,127,128,130],{},"2、强制重置 ",[28,126,62],{"code":62},"分支，使其指向 ",[28,129,51],{"code":51},"最新的提交",[37,132,135],{"className":133,"code":134,"language":42,"meta":43},[40],"git branch -f master-upstream upstream\u002Fmaster\n",[28,136,134],{"__ignoreMap":43},[20,138,140,141],{"id":139},"三将更新合并到本地分支master","三、将更新合并到本地分支",[28,142,34],{"code":34},[16,144,145,146,148],{},"1、切换到",[28,147,34],{"code":34},"分支",[37,150,153],{"className":151,"code":152,"language":42,"meta":43},[40],"git switch master\n",[28,154,152],{"__ignoreMap":43},[16,156,157,158,160,161,148],{},"2、将 ",[28,159,62],{"code":62},"上的最新内容整合到 ",[28,162,34],{"code":34},[37,164,167],{"className":165,"code":166,"language":42,"meta":43},[40],"git merge master-upstream\n",[28,168,166],{"__ignoreMap":43},[20,170,172,173],{"id":171},"四解决任何冲突完成合并后提交并推送代码到master","四、解决任何冲突，完成合并后提交并推送代码到",[28,174,34],{"code":34},[37,176,179],{"className":177,"code":178,"language":42,"meta":43},[40],"git push origin master\n",[28,180,178],{"__ignoreMap":43},[20,182,184],{"id":183},"小贴士如何优雅地处理合并冲突","小贴士：如何优雅地处理合并冲突？",[16,186,187,188,191,192,195],{},"当你执行 ",[28,189,190],{"code":190},"git merge"," 看到提示 ",[28,193,194],{"code":194},"CONFLICT (content): Merge conflict in \u003Cfile>"," 时，不要慌，按照这三步走：",[197,198,199],"ol",{},[200,201,202],"li",{},"找到“案发现场”",[16,204,205],{},"打开冲突的文件，你会看到 Git 自动标记的冲突区域：",[37,207,212],{"className":208,"code":210,"language":211,"meta":43},[209],"language-sql","\u003C\u003C\u003C\u003C\u003C\u003C HEAD\n这里是你本地 master 分支的代码（你改动的内容）\n======\n这里是上游 master-upstream 分支的代码（别人改动的内容）\n>>>>>> master-upstream\n","sql",[28,213,210],{"__ignoreMap":43},[197,215,217],{"start":216},2,[200,218,219],{},"进行“人工裁决”",[221,222,223,237,240],"ul",{},[200,224,225,226,229,230,229,233,236],{},"保留一方： 删掉你不想要的那部分代码和所有的 ",[28,227,228],{"code":228},"\u003C\u003C\u003C\u003C"," ",[28,231,232],{"code":232},"====",[28,234,235],{"code":235},">>>>"," 标记。",[200,238,239],{},"整合双方： 手动将两段代码逻辑合并在一起，然后删掉标记。",[200,241,242],{},"VS Code 技巧： 如果你用 VS Code，代码上方会出现快捷按钮（Accept Current Change \u002F Accept Incoming Change），点一下即可自动完成。",[197,244,246],{"start":245},3,[200,247,248],{},"告诉 Git 冲突已搞定",[16,250,251],{},"修改并保存文件后，必须执行：",[37,253,256],{"className":254,"code":255,"language":42,"meta":43},[40],"# 1. 将解决后的文件标记为已暂存\ngit add \u003C文件名>\n\n# 2. 完成合并提交\ngit commit -m \"fix: 解决与上游分支的合并冲突\"\n",[28,257,255],{"__ignoreMap":43},[16,259,260],{},"如果合并过程太乱，你想重头来过，可以执行 git merge --abort 瞬间回到合并前的干净状态，就像什么都没发生过一样。",{"title":43,"searchDepth":262,"depth":262,"links":263},4,[264,265,266,268,270],{"id":22,"depth":216,"text":23},{"id":102,"depth":216,"text":103},{"id":139,"depth":216,"text":267},"三、将更新合并到本地分支master",{"id":171,"depth":216,"text":269},"四、解决任何冲突，完成合并后提交并推送代码到master",{"id":183,"depth":216,"text":184},[272],"开发","2026-03-08","几行代码即可合并上游分支的最新代码",false,"md",null,{"slots":279},{},true,"\u002Fposts\u002Fmerge-upstream-branches",{"text":283,"minutes":284,"time":285,"words":286},"4 min read",3.21,192600,642,{"title":5,"description":274},{"loc":281},"posts\u002Fposts\u002Fmerge-upstream-branches",[291],"git","tech","eqLvuXMonCmz2T45C9GoskhcIAOfKNbGKrSbgCrEjQY",[295,300],{"title":296,"path":297,"stem":298,"date":299,"type":292,"children":-1},"PowerShell SSH 效率手册：免密、别名与端口转发","\u002Fposts\u002Fpowershell-ssh-config","posts\u002Fposts\u002Fpowershell-ssh-config","2026-03-07",{"title":301,"path":302,"stem":303,"date":273,"type":292,"children":-1},"NAS 碎文件存储优化：VHDX 虚拟磁盘方案","\u002Fposts\u002Fnas-vhdx-storage-solution","posts\u002Fposts\u002Fnas-vhdx-storage-solution",1788712223059]