Stable Diffusion WebUI(以下简称SD WebUI)的更新机制依赖git,执行git pull拉取最新代码时,一旦本地工作区不干净就会报错中断。更麻烦的是,有些朋友更新成功后发现模型目录乱套了,或者更新后根本启动不了。这篇文章把更新失败的处理和更新前的备份策略完整讲一遍,照着做基本能避开所有常见的坑。

git pull为什么会在SD WebUI里频繁冲突
SD WebUI的安装目录本质上是一个git仓库,作者AUTOMATIC1111(或者你用的fork分支)持续往远程仓库推送新代码。执行更新时,git需要把远程的新提交合并到你本地的当前分支。问题在于,日常使用过程中,很多操作会悄悄改动仓库里的文件,导致本地出现“未提交的修改”。最常见的有三种情况:
第一种是运行时生成的文件污染了仓库目录。比如你把生成的图片直接存在webui根目录,或者某些扩展插件往仓库里写了日志文件,git发现这些文件与远程版本不一致就拒绝合并。第二种是你手动改过源码,比如为了去掉某些限制、修改默认参数而动过launch.py或modules目录下的文件,这类改动更新时必然冲突。第三种是网络中断导致的更新失败残留,上次pull到一半断线,留下了半截的合并状态,下次更新就会报You have not concluded your merge之类的错误。
典型的报错信息如下:
error: Your local changes to the following files would be overwritten by merge:
modules/shared.py
Please commit your changes or stash them before you merge.
Aborting看到这段提示先别慌,它只是说git为了保护你的修改而中止了操作,没有任何东西被破坏。关键是判断哪些修改是你想保留的,哪些可以直接丢弃。
三种安全清理工作区的方法
清理之前,强烈建议先用git status看一眼当前状态。这条命令会列出所有被修改和未跟踪的文件,帮助你判断哪些改动重要。输出的信息分几类:Changes not staged for commit是你改过的文件,Untracked files是git完全不认识的新文件(通常是你自己生成的),conflict相关的提示则说明处于合并冲突状态。
方法一:用stash暂存你的修改。如果你改过源码且想保留这些改动,用stash最稳妥:
cd /path/to/stable-diffusion-webui git stash # 把本地修改暂存起来,工作区变干净 git pull # 拉取更新 git stash pop # 把之前的修改恢复回来
如果恢复时提示冲突,说明新版代码改动了同一处位置,需要手动编辑冲突文件,找到<<<<<<<标记的区域,保留正确的内容后删除标记。改完所有改动方式后,把文件加入暂存区即可。这个方法的好处是进可攻退可守,改坏了还能用git stash drop丢弃。
方法二:强制回退到远程最新版本。如果你改的代码不重要或者记不清改了什么,直接放弃本地修改最快:
git fetch --all git reset --hard origin/master # 或者主分支名,用 git branch -a 查看 git clean -fd # 删除所有未跟踪的文件和目录,慎用
注意git reset --hard会丢掉所有未提交的修改,执行前务必确认。而git clean -fd更危险,它会把所有git不认识的文件删掉——如果你的模型恰好放在仓库目录内且被gitignore排除,理论上不受影响,但为了保险,执行前可以先用git clean -fdn做一次演练,参数n表示只列出要删的文件不真删。
方法三:处理卡在合并中间的状态。如果git status显示You have unmerged paths或者All conflicts fixed but you are still merging,说明之前有一次没完成的合并:
git merge --abort # 放弃这次合并,回到合并前的状态 git pull # 重新拉取
如果merge --abort也报错,可以配合方法二的reset --hard彻底重置。
更新前备份模型与配置的完整策略
与其更新出问题后抢救,不如养成更新前备份的习惯。SD WebUI中真正值钱的数据其实很少,掌握目录结构后备份会非常轻松。需要备份的核心目录有这么几个:
models/Stable-diffusion:主模型ckpt和safetensors文件,体积最大也最重要models/Lora:LoRA模型models/VAE和models/hypernetworks:VAE模型和超网络embeddings:训练好的embedding文件extensions:第三方扩展插件outputs:生成的图片和历史记录config.json和ui-config.json:WebUI的界面配置和默认参数
最省心的方案是把这些目录整体复制到仓库外面,比如在同级目录建一个backup文件夹。Windows用户可以直接复制粘贴,Linux下用一条命令搞定:
mkdir -p ../sd-backup cp -r models embeddings extensions outputs config.json ui-config.json ../sd-backup/
备份完成后就可以放心大胆地重置代码目录了,甚至可以直接重新clone整个仓库,然后把备份目录复制回去。这种“仓库与数据分离”的思路值得长期采用:你可以用符号链接把models目录指向仓库外的固定位置,这样以后无论怎么更新、重装,模型文件都安然无恙。Windows下用管理员权限的命令提示符执行mklink /D,Linux下用ln -s即可。
另外提醒一点,extensions目录里的插件本身也是git仓库,更新主程序后部分插件可能因为接口变动报错。遇到插件导致的启动失败,可以先进入对应插件目录执行git pull更新插件,或者干脆把可疑插件文件夹暂时移出extensions目录,逐个排查。
更新后启动报错的排查思路
代码更新成功不代表万事大吉,新版经常要求新的依赖版本。如果启动时提示某个包找不到或者版本不匹配,多半是虚拟环境里的依赖没跟上。SD WebUI自带修复机制,以Windows的一键启动包为例,进入仓库目录下的venv\Scripts,激活虚拟环境后手动执行:
cd venv\Scripts activate cd ../.. python launch.py --upgrade --reinstall-torch
其中launch.py会自动检测并安装缺失的依赖。如果报错信息指向某个具体包,比如No module named xxx,直接在虚拟环境里pip install xxx补装即可。还有一种常见情况是新版默认参数变动导致显存溢出,可以在启动命令里加上--lowvram或--medvram先跑起来,再慢慢调整。
最后给一个建议:不要追着每一次更新跑。SD WebUI的版本迭代很快,部分提交并不稳定,如果你当前版本用得好好的,可以停在稳定版上,等社区反馈正面后再更新。更新前花五分钟做一次完整备份,比更新失败后花几小时恢复要划算得多。把模型数据与代码仓库分离管理后,更新这件事就再也没有心理负担了。
SD WebUIgit pull冲突模型备份修改时间:2026-09-04 18:58:42