news 2026/10/14 16:42:49

《新人入职必看:Git从零基础到团队协作实战(保姆级教程)》

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《新人入职必看:Git从零基础到团队协作实战(保姆级教程)》

摘要:刚学编程时,很多人以为Git就是add、commit、push三连。但真正入职参与多人协作后,却发现代码经常冲突、提交历史乱成一锅粥、甚至不小心把同事的代码覆盖了。本文结合真实的公司协作流程,带你从零基础吃透Git,并附上职场新人的“急救避坑指南”,建议收藏!

一、 为什么Git是入职的第一道坎?

面试造火箭,入职拧螺丝。当你通过层层面试拿到Offer,入职第一天,你的Leader大概率会发给你一个Git仓库地址,然后说:“去把代码clone下来,配一下环境。”

这个时候,如果你只会git clone,一旦遇到拉取失败、代码冲突、或者不小心提交错文件,就会瞬间手足无措。Git不仅是保存代码的工具,更是团队协作、代码审查(Code Review)甚至“自救”的核心。今天这篇保姆级教程,我将带大家分三个阶段彻底掌握它:新手村(单机基础) -> 职场实战(多人协作) -> 后悔药(错误急救)。

二、 第一阶段:新手村任务(单机基础操作)

1. 安装与初始化配置(入职第一天必做)

安装完Git后,第一件事是配置你的用户名和邮箱(这决定了你提交代码时的署名)。

# 配置全局用户名和邮箱(把名字换成你在公司的花名/拼音)gitconfig--globaluser.name"你的名字"gitconfig--globaluser.email"你的邮箱@company.com"# 查看配置是否生效(按 q 退出)gitconfig--list

2. 准备工作:新建你的代码文件夹并打开命令行

很多新手看教程时,打开终端(黑框框)就开始敲命令,结果发现报错。因为你必须先进入你想存放代码的那个文件夹。

第一步:建一个工作文件夹
在你的电脑桌面上,新建一个文件夹,名字叫git-demo(或者叫“我的第一个仓库”)。

第二步:在文件夹里打开命令行(新手最容易卡住的地方)

  • Windows 系统:
    双击进入git-demo文件夹,在文件夹顶部地址栏里,把里面的路径全部删掉,输入cmd,然后按回车。你会看到弹出一个黑框框,前面的路径就是你的git-demo文件夹。这就是“在当前目录下打开命令行”。
    (或者:按住键盘上的Shift键,然后在文件夹空白处点击鼠标右键,选择“在此处打开 PowerShell 窗口”或“在终端中打开”)
  • Mac 系统:
    打开“终端(Terminal)”应用,输入cd(注意 cd 后面有一个空格),然后直接把git-demo文件夹拖拽到终端窗口里,按回车。

第三步:验证自己在哪里
为了确保我们在正确的文件夹下,输入以下命令(Windows 输入ls或dir,Mac 输入ls):

ls# Windows/Mac/Linux 查看当前目录下的文件dir# Windows 查看当前目录下的文件

💡 提示:如果你发现里面是空的,说明你成功进入了刚刚新建的文件夹!

3. 初始化仓库与基础四连(理解原理)

在公司,你通常是先clone(克隆)远程仓库,但这里我们先讲init(初始化),帮你理解Git到底在做什么。

在刚才的终端里,输入:

# 初始化一个本地仓库。这个命令会在当前文件夹下创建一个隐藏的 .git 文件夹,用来记录版本信息。gitinit

此时你会看到终端提示Initialized empty Git repository in ...,说明成功了。

💡 核心概念加油站:Git 的“三个区”到底是什么? 在敲接下来的命令前,你必须先弄懂 Git
最核心的“三个区”概念。别怕,我们用“去超市买东西”来打个比方:

工作区(Workspace):就是你电脑里能看到的文件夹(比如 git-demo)。相当于超市的货架,你在这里挑选商品(修改代码)。

暂存区(Staging Area / Index):一个临时存放修改的地方。相当于购物车。你挑好东西先放进购物车,但还没结账,随时可以把东西拿出去(撤销修改)。

版本库(Repository / Local Repo):就是那个隐藏的 .git 文件夹。相当于收银台结账后的小票/本地档案库。东西一旦结账(提交),就会在本地留下永久的历史记录。

远程仓库(Remote Repo):公司的GitLab/GitHub服务器。相当于云端的总仓库。

它们之间的转换关系(核心):

git add:把商品从“货架”放进“购物车”(工作区 -> 暂存区)

git commit:去收银台结账,把小票存进“本地档案库”(暂存区 -> 本地版本库)

git restore --staged:把购物车里的东西拿出来,放回货架(暂存区 -> 工作区)

git push:把本地档案库的货物打包,快递到“云端总仓库”(本地版本库 -> 远程仓库)
💡 注:git push 是团队协作的关键一步,只有推送到远程仓库,你的同事才能看到并拉取你的代码。

理解了这四个区,我们再看接下来的操作,你就会豁然开朗。

接下来,我们在文件夹里新建一个文本文件,比如index.html,随便写点内容。然后在终端里敲出“基础四连”:

# ==========================================# 第一连:查看状态(对比前)# ==========================================gitstatus# 查看当前文件状态,此时 index.html 会显示为红色(未追踪)# ==========================================# 第二连:添加到暂存区# ==========================================gitadd.# 把当前目录下所有修改(包括新建、修改、删除)添加到暂存区gitaddindex.html# 【特定文件用法】如果只想添加某一个文件,可以用这个命令gitstatus# 再次查看状态,此时 index.html 会变为绿色(已暂存,等待提交)# ==========================================# 第三连:正式提交到本地版本库# ==========================================gitcommit-m"feat: 完成登录页面的UI开发"# 提交暂存区的内容,并附上描述信息# ==========================================# 第四连:推送到远程仓库(团队协作必做)# ==========================================# 如果你是第一次推送,并已经在 GitHub/GitLab 上建好了空仓库,拿到地址后,先把它绑给 origingitremoteaddorigin https://github.com/你的用户名/你的仓库名.git# 手动把远程地址绑给 origin 这个代号# 然后再推送gitpush-uorigin main# 把本地 main 推上去,第一次推送时,加上 -u 参数,将本地分支与远程 main 分支关联# git push # 如果已经关联过远程分支,直接执行这一句即可

💡 注意:在你执行 git remote add origin … 之前,Git 根本不知道 origin 是谁,所以直接敲 git push -u origin main 会报错。我们这里先手动告诉 Git:“以后我说 origin,指的就是这个地址。”
💡 职场建议:提交信息(Commit Message)千万不要写“修改”、“update”、“提交”。推荐使用feat:(新功能)、fix:(修复Bug)、docs:(文档)等前缀。


4. 查看历史与差异

# 查看提交历史(按q退出)gitlog--oneline# 查看工作区与暂存区的代码差异gitdiff

三、 第二阶段:职场实战(多人协作流程)

1. 入职第一天:把公司代码克隆到本地(git clone)

你入职后,Leader 会发给你一个 Git 仓库地址(类似https://gitlab.company.com/team/project.git)。你需要做的第一件事,就是把这个远程仓库完整地“搬”到你的电脑上。

操作步骤:

# 第一步:在你的电脑上建一个存放代码的文件夹(比如 D:\work),然后在里面打开命令行# 第二步:执行克隆命令,把远程仓库下载到本地gitclone https://gitlab.company.com/team/project.git# 克隆远程仓库到本地,会自动创建一个 project 文件夹并初始化好 .git# 第三步:进入克隆下来的项目文件夹cdproject# 进入项目目录,后续所有操作都在这个目录下进行# 第四步:验证远程仓库别名(新手必看)gitremote-v# 查看远程仓库地址,你会看到 origin 后面跟着你刚才 clone 时输入的 URL

💡 什么是 origin?
origin 是 Git 给远程仓库起的默认名字。你在 clone 时输入了完整的 URL,Git 就自动把这个 URL 存成了 origin。以后你写 git pull origin main,就相当于告诉 Git:“去那个叫 origin 的远程仓库,拉取 main 分支的代码”。不用每次都输入长长的 URL,非常方便。

💡 提示:clone是入职后最没有门槛的操作,但一定要确认你 clone 的是正确的仓库地址。如果 clone 报错,通常是权限问题(找 Leader 给你开仓库权限)或者网络问题。

💡 新手加油站:分支到底是什么?(河流与港口的比喻)
很多新手 clone 完代码,看到 main 分支就懵了:为什么不能直接在上面写?新分支为什么能用 main 的代码?推送到远程后,为什么 main 上看不到我的改动?

我们用“两条河流”来彻底理解:

main 是主干河流:A -> B -> C 是主河流的流向,C 是 main 当前最新的入海口。

feature/user-login 是支流:你从 C 这个位置挖出一条支流。支流里的水(代码)天然带着主干河流 A、B、C 所有的历史。D -> E 是你在这条支流上新的开发记录,E 是支流当前最新的入海口。

两条河流互不干扰:你在支流里怎么折腾,主干河流 main 都不会受影响。这就是为什么推送到远程后,main 分支完全看不到你的改动——它们此时是两条平行的河道。

让新手观察:

gitbranch# 查看本地分支,* 表示当前所在分支gitlog--oneline--graph--all# 查看提交历史的分支图

2. 分支管理:永远不要在 main 分支上直接开发

注意: 你刚 clone 下来时,Git 已经自动把你放在了默认分支(通常是 main)上。你可以敲 git branch 确认一下,前面带 * 号的就是你当前所在的分支。虽然你现在就在 main 分支上,但千万不要直接在这里写代码!
公司的主干分支(通常是main或master)是受保护的,你无法直接推送代码上去。开发新功能必须切分支。

#首先gitbranch# 查看本地分支,前面带 * 号的就是你当前所在的分支# 1. 先切换到主分支gitcheckout main# 从当前分支切换到 main 分支# 2. 拉取远程最新代码(重要!防止基于旧代码开发,引发后续冲突)gitpull origin main# 从远程 main 分支拉取最新代码并合并到本地# 3. 创建一个新的功能分支并切换到该分支gitcheckout-bfeature/user-login# -b 表示新建分支,feature/user-login 是分支名(公司通常用 feature/xxx 命名)# 4. 在这个分支上开发、add、commit# ... 编写代码 ...gitadd.# 把工作区的所有修改添加到暂存区gitcommit-m"feat: 实现用户登录逻辑"# 提交到本地版本库,附上描述信息

3. 提交代码与发起合并请求(MR/PR)

开发完成后,将本地分支推送到远程仓库。

# 将本地分支推送到远程,并建立关联gitpush-uorigin feature/user-login# -u 表示将本地分支与远程分支关联,以后直接 git push 即可

推送成功后,去公司的 GitLab/GitHub 网页端,发起一个Merge Request (MR)或Pull Request (PR),让同事进行代码审查(Code Review)。审查通过后,由负责人合并到main分支。
疑问

❓ 两条河流怎么才能汇合?
Git 的设计哲学是:河流之间是隔离的,想要汇合需要人工开闸放水。
你推送后,远程仓库就是上面图画的那样:main 和 feature/user-login 是两条平行的河道,互不干扰。
如果推送到远程就自动合并到 main,那公司的主干河流早就泛滥成灾了,谁写了个 Bug 都会直接污染所有人的代码。

❓ 谁来操作合并?
由人来操作,而不是 Git 自动完成的。 标准流程如下:

1.你发起 MR/PR:在网页端填写标题和描述(申请开闸放水)。

2.同事审查代码(Code Review):他们逐行看你改了哪些代码,可以留言要求修改。

3.你根据反馈继续修改:本地改完后 git add . → git commit → git push,MR 会自动更新。

4.负责人点击 Merge 按钮(开闸放水):审查通过后,由你或 Tech Lead 在网页端点击 Merge。这时 Git才会把两条河流汇聚在一起,建一个新的港口 F:

看图说话:合并时,Git 会把 main 的最新入海口 C 和 feature 的最新入海口 E 汇合,生成一个新的港口 F。
合并完成后,你的代码就正式流入了 main。之后其他同事再 git pull origin main 时,就能看到你的代码了。

删除已合并的功能分支:合并后,这条支流的水已经汇入主干,可以在网页端点击“Delete branch”把支流填平,保持仓库整洁。

一句话总结:

你负责在自己的支流(分支)上写代码并推送 → 发起 MR → 同事审查 → 负责人点 Merge(开闸放水) →
代码才真正进入主干河流(main)。任何人都不能绕过审查直接往 main 上推代码。

4. 解决代码冲突(最让新人头疼的环节)

场景复现:你在 feature/user-login 分支上开发,你的同事也在 main 分支上修改了同一个文件(比如 index.html),并且他已经合并到了远程 main。此时你准备提交代码,却发现你的分支已经落后于主干了。

💡 新手疑问:为什么是在本地把 main 合并到 feature,而不是反过来? 很多新手会想:“我要提交代码,难道不是把我的feature 合并到 main 吗?为什么反而要把 main 合并到我这里?”

答案很简单:主干河流(main)是受保护的,你本地没有权限直接操作它。 把 main 合并到 feature,相当于“在支流里先把主干最新的水引过来,在安全的本地环境里解决冲突、测试通过”。等你的支流完全没问题了,再到网页端发起MR,由负责人把支流正式汇入主干。

1. 确保你在自己的功能分支上

gitcheckout feature/user-login# 切换到你的分支

2. 查看当前工作区是否干净(如果有未提交的代码,请先 commit 或 stash)

gitstatus# 查看状态,确保没有未完成的修改

3. 把 main 分支的最新代码合并到当前分支

gitmerge main# 把 main 分支的最新代码合并到当前分支,此时可能产生冲突

如果发生冲突,Git 会在终端提示类似:CONFLICT (content): Merge conflict in index.html。此时 Git 会暂停合并,等待你手动解决冲突。

🔧 解决冲突的详细步骤:
第一步:找到冲突的文件
再次运行 git status,你会看到 Unmerged paths 下面列出了所有冲突的文件(通常是红色的)。

第二步:打开文件,手动解决冲突
用编辑器(VS Code 等)打开冲突文件,你会看到类似这样的标记:

<<<<<<< HEAD<h1>欢迎来到登录页(你的代码)</h1>=======<h1>请在此处登录(同事的代码)</h1>>>>>>>> main

<<<<<<< HEAD 到 ======= 之间:是你当前分支的代码。

======= 到 >>>>>>> main 之间:是main 分支合并过来的代码。

你需要做的:和同事沟通,决定保留哪段代码(或者把两者融合)。删除 <<<<<<<、=======、>>>>>>> 这三行标记,留下正确的业务代码。

第三步:重新提交

gitaddindex.html# 把解决冲突后的文件重新添加到暂存区gitcommit-m"fix: 解决与main分支的代码冲突"# 提交这次冲突解决的记录

🚑 新手救命稻草:如果冲突太多,我想放弃怎么办?
如果你看到满屏的冲突,完全不知道怎么改,千万不要乱删代码。你可以随时“取消合并”,回到合并前的状态:

gitmerge--abort# 中止本次合并,恢复到执行 git merge main 之前的状态

执行后,你的分支会回到没合并之前的样子。你可以先找同事求助,理清思路后再重新 git merge main。

一句话总结:
冲突不可怕,先 git status 找文件 → 打开文件删标记 → git add + git commit。实在搞不定就 git merge --abort 重来。


四、 第三阶段:Git急救指南(错误如何修改?)

人在江湖飘,哪有不挨刀。新手遇到报错最容易慌,甚至乱敲命令把代码搞丢。记住一个口诀:遇到任何问题,先敲git status看状态,然后再对症下药。下面我整理了职场新人最常遇到的 6 个“灾难现场”及抢救方案。

🚨 灾难1:代码写崩了,想撤销还没add的修改

场景复现:你改了半天代码,越改越乱,想直接放弃,回到最后一次 commit 时候的样子(此时你还没执行git add)。
抢救命令:

gitrestore.# 放弃所有工作区的修改(危险!不可逆)gitrestore index.html# 只放弃 index.html 这一个文件的修改

状态对比:执行前,git status显示文件是红色(在工作区)。执行后,代码直接回到上次提交的状态,你的乱改全没了。
⚠️ 警告:这个命令是不可逆的,你刚刚写的代码会直接消失,连git reflog都救不回来,慎用!

🚨 灾难2:手滑git add了,但还没commit,想撤回来

场景复现:你不小心把node_modules或者一堆无关文件git add .加进去了,或者觉得代码没写好,想从暂存区拿回来。
抢救命令:

gitrestore--staged.# 把所有文件从暂存区撤回工作区gitrestore--stagedindex.html# 只撤回 index.html 这一个文件

状态对比:执行前,git status显示文件是绿色(在暂存区)。执行后,文件变回红色,但代码修改完好无损,只是回到了工作区。

🚨 灾难3:刚commit完,发现漏了个文件或注释写错了

场景复现:你敲完git commit -m "...",突然发现漏了一个关键文件没提交,或者提交信息有个错别字。
抢救命令:

gitaddforgotten_file.js# 把漏掉的文件先补上gitcommit--amend-m"feat: 补充遗漏文件"# 覆盖上一次的提交,并修改注释

状态对比:git log中不会多出一条提交记录,而是直接把上一次的提交“替换”掉了。
⚠️ 警告:仅限本地未推送到远程(未push)的提交!如果你已经 push 了,再 amend 会导致本地和远程冲突,极其麻烦。

🚨 灾难4:刚commit完,想撤回暂存区重新检查(未 push)

场景复现:你敲完git commit -m "xxx",突然发现提交信息写错了,或者发现多提交了一个文件,你想撤销这次提交,但不想丢失代码,想回到“已add但未commit”的状态重新整理。
抢救命令:

gitreset--softHEAD~1# 撤销上一次 commit,代码保留在暂存区(绿色状态)

状态对比:

  • 执行前:git status显示nothing to commit, working tree clean(干净状态)。
  • 执行后:再次敲git status,你会看到刚刚提交的文件又变回了绿色(Changes to be committed)。你的代码一行没丢,只是退回了暂存区,你可以重新修改代码或者重新git commit。

💡 对比记忆:

  • 想退回暂存区(绿色):git reset --soft HEAD~1
  • 想退回工作区(红色):git reset HEAD~1(默认的 mixed 模式)
  • 想彻底销毁这次提交(危险):git reset --hard HEAD~1

⚠️ 警告:依然仅限本地未push的提交!如果已经push到了远程,不要用reset,否则会造成远程和本地的历史冲突。

git reset 有三个常用模式,区别就在于把代码“退”到了哪个区:

– – soft(软重置):只撤销 commit,代码完好无损地留在暂存区(绿色)。这正好符合你的需求。

– – mixed(默认,即 git reset HEAD~1):撤销 commit,代码退回工作区(红色)。

– – hard(硬重置):撤销 commit,代码直接销毁(不可逆)。

🚨 灾难5:忘记切分支,直接在main上写代码并commit了

场景复现:入职第一天太激动,忘了切分支,直接在main分支上开发并提交了一次。现在想把这笔提交移到自己的功能分支上。
抢救命令:

gitlog--oneline# 先看一眼,记住你刚刚的提交gitreset HEAD~1# 撤销刚才的 commit,但保留代码在工作区(HEAD~1 表示退回上一次提交)gitcheckout-bfeature/user-login# 新建并切换到正确的分支gitadd.# 重新添加代码gitcommit-m"feat: 实现用户登录逻辑"# 在正确的分支上重新提交

状态对比:执行reset HEAD~1后,main分支回到了你写代码之前的状态,而你的代码变成了红色(未追踪)。接下来你切到新分支重新提交,main分支就被彻底解救了。

🚨 灾难6:终极救命稻草——不小心git reset --hard把代码搞丢了

场景复现:你本来想撤销一点东西,结果手贱敲了git reset --hard,屏幕一闪,你辛辛苦苦写了一天的代码全没了,此时你万念俱灰。
抢救命令:

gitreflog# 查看引用日志(时光机),这里记录了你的所有操作

你会看到类似这样的输出(重点看最前面的哈希值):

a1b2c3d (HEAD -> main) HEAD@{0}: reset: moving to HEAD~1 f4e5d6c HEAD@{1}: commit: feat: 写完了一天的代码

找到你误操作之前的那条记录(比如f4e5d6c),然后:

gitreset--hardf4e5d6c# 穿越回那个版本,代码瞬间复活

💡 提示:只要你的.git文件夹没被删除,git reflog能救回绝大多数误删的提交。这是每个程序员都必须知道的保命技能!

⚠️ 职场红线警告:绝对不要git push -f

有些新手在遇到本地和远程冲突时,为了图省事,会使用git push -f(强制推送)覆盖远程分支。这是极其严重的生产事故!它会直接抹掉你同事提交的代码,轻则被痛骂,重则直接辞退。遇到冲突,老老实实git pull然后手动解决,绝不能强推。


💡 新手急救速查表(建议截图保存):

灾难场景抢救命令危险等级
想撤销未 add 的修改git restore .🔴 高(不可逆)
想撤回已 add 未 commitgit restore --staged .🟢 安全
漏文件/改注释(已commit 未 push)git add .+git commit --amend🟡 中(限未 push)
想退回暂存区重新检查(已commit 未 push)git reset --soft HEAD~1🟢 安全
提错分支想转移git reset HEAD~1→ 切分支 → 重新add + commit🟢 安全
代码被 reset --hard 搞丢git reflog→git reset --hard <哈希值>🟢 安全(保命)

五、 老司机的职场忠告(写给新人)

  1. 勤拉取,早提交:每天开工前先git pull,功能拆分得小一点,频繁提交,这样冲突最少。
  2. 不清楚状态时,先git status:不管遇到什么报错,先敲这个命令,它会告诉你当前处于什么状态,该怎么做。
  3. 不要提交无关文件:学会使用.gitignore文件,把node_modules、.env、*.log等文件排除在外。
  4. 遇到冲突不要乱删代码:看不懂冲突时,叫上修改该文件的同事一起看,沟通是解决冲突最好的工具。

六、 总结

Git的学习曲线是前陡后缓的。新手期只要掌握add、commit、push、pull和解决冲突就足够应对80%的工作。遇到报错时,善用搜索引擎和git status,你的Git水平一定会突飞猛进。

如果这篇文章帮你避开了Git的坑,欢迎点赞、收藏、关注!你在使用Git时踩过最大的坑是什么?欢迎在评论区分享你的“血泪史”!


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 16:42:26

27. 数据产品-数据治理-6. DAMA 数据关系语境图拆解

文章目录前言一、语境关系图&#xff1a;核心价值 全层级适用人群底层设计思路三大核心价值适配企业全层级人员&#xff0c;统一沟通语言二、自上而下四层分层逻辑&#xff1a;搭建治理能力底座1. 顶层&#xff1a;领域定义 & 目标准则2. 中层核心&#xff1a;四大执行活动…

作者头像 李华
网站建设 2026/10/14 16:41:29

FPGA缺货涨价交期超一年,2026硬件开发者应对策略全解析

最近一段时间&#xff0c;硬件圈子里讨论度最高的话题&#xff0c;不是哪个新架构发布了&#xff0c;也不是哪家工具链又迭代了版本&#xff0c;而是“FPGA怎么又涨了”。年初的时候&#xff0c;部分主流型号的报价还是按季度走&#xff0c;转眼间&#xff0c;现货价格已经按周…

作者头像 李华
网站建设 2026/10/14 16:40:48

openrig实战:Claude Code与Codex本地环境搭建与模型接入指南

1. 从“openrig”说起&#xff1a;一个把 Claude Code 和 Codex 装进同一台机器的实战思路第一次看到 “openrig” 这个词&#xff0c;我下意识把它拆成了 “open” 和 “rig” 两半。rig 在英文里除了“装备、装置”&#xff0c;在工程语境里还有一层很实在的意思——把一堆零…

作者头像 李华
网站建设 2026/10/14 16:40:33

VS2008 C++ GDAL显示TIFF影像:环境配置、中文路径与性能优化

简介&#xff1a;面向GIS初学者与C开发者的VS2008环境GDAL库示例工程&#xff0c;完整演示了从驱动器打开TIFF、获取数据集与波段、读取像素到屏幕显示的流程&#xff0c;并给出头文件路径与链接库的配置方法&#xff0c;可快速落地遥感影像读取显示功能&#xff0c;适合初学者…

作者头像 李华
网站建设 2026/10/14 16:40:25

在各步骤之间保存与恢复上下文

1. 什么是 workflow 上下文,它为何重要 在普通的 Web 应用中,你通常很清楚状态存在哪里:数据库、缓存,以及前端的 Redux 或本地 React 状态。到了 ChatGPT App 就更有意思了:状态同时分布在三个世界里——模型内部(对话历史)、小部件内部(UI 状态)以及你的服务器/MCP…

作者头像 李华