
讲个真事我见过不少刚入门的朋友拿着一个项目压缩包改完代码后右键压缩再通过聊天软件发回给同事两个人盯着“最终版v3_真正最终版”这种文件名大眼瞪小眼。后来他们也知道要学 Git 和 GitHub但一打开终端看到一堆命令就发怵觉得自己不是“写代码的料”。其实真不是这样Git 和 GitHub 这对组合没那么玄乎你只需要先掌握几个最高频的配合动作就足够应付绝大多数日常开发了。这篇文章就围绕“Git 和 GitHub 到底怎么配合”这个核心问题给零基础的朋友拆解我最常用的 6 个操作。你会搞清楚 Git 在本地管什么、GitHub 在云端管什么以及本地和远程是怎么通过命令串起来的。整个过程不需要背几十条指令把 clone、status、add、commit、push、pull、branch 这几件事玩明白你就已经超过了绝大多数“只会解压文件包写代码”的人。1. 先把两件事分清楚Git 和 GitHub 各自管什么很多人把 Git 和 GitHub 当成同一个东西这是新手最容易绕进去的弯。你想让它们好好配合必须先弄明白各自的位置就像你要让快递员和仓库配合总得知道谁负责跑腿、谁负责存货。1.1 别再混淆Git 是工具GitHub 是托管平台Git 是一个分布式版本控制工具它装在你的电脑上负责记录你本地代码的每一次修改历史。你可以把它理解成一个“时间定格相机”只要你按下提交的快门它就能把当前所有文件的状态保存成一个版本之后你想回到哪个时间点都行。这个相机的核心是三个区域工作区你正在编辑的文件、暂存区你准备保存的改动集合、版本库已经保存下来的历史记录后续操作全在这三个区域之间来回倒腾。GitHub 则是建立在 Git 之上的一家代码托管平台。它把 Git 的“本地版本记录”能力扩展到云端你的项目可以有一个“远程仓库”全世界的协作者都能通过这个远程仓库同步代码、查看历史、提交合并请求。Git 解决的是“版本怎么管”GitHub 解决的是“代码放哪里、大家怎么协作”。这里有个特别容易混淆的点Git 是免费的、开源的你不需要联网也能用GitHub 上的仓库默认存在人家的服务器上想要用就得联网。所以哪怕你完全不用 GitHub只在本地用 Git 管理自己的代码也完全没有问题。反过来你注册了 GitHub 账号但本地不装 Git那你在网站上除了看代码、点 star什么都干不了。两者是“工具”和“平台”的关系配合起来才是一套完整的工作流。1.2 为什么要坚持从命令行开始学新手上路我强烈建议先从命令行终端学 Git而不是一上来就依赖图形界面工具。原因很简单命令行是 Git 的本体所有 GUI 工具比如可视化客户端、集成开发环境里的按钮背后调用的都是那几条命令。你从命令行入手能清楚地看到每一步做了什么报错信息也看得懂你从按钮入手点完也许成功了但一旦出错就完全不知道内部发生了什么。更重要的是很多真实场景根本没有图形界面。比如你在一台云服务器上部署项目、在一台嵌入式设备上同步代码、或者通过远程连接操作开发机这些环境里你大概率只能敲命令。我见过有人平时用客户端用得很顺手一碰到服务器部署就卡住最后只能到处复制粘贴别人的命令连执行成功了没有都看不出来。所以别嫌命令行丑它才是真正通用的能力。命令行还有一个好处它能帮你建立正确的“仓库直觉”。当你手动敲出 git add、git commit、git push 这一串命令时你会慢慢感受到本地版本库和远程仓库之间那条看不见的“同步线”这是任何图形工具都无法替代的理解。1.3 六个操作覆盖的完整日常流程文章标题说的 6 个操作不是随机挑的它们刚好串起了一个非常标准的小白日常流程从 GitHub 上把项目拿到本地clone看清楚了当前有什么改动status把改动加入预备队列add保存成一个版本commit推到 GitHub 上备份和同步push开工前再拉一下同事的最新改动pull最后在需要尝试新功能时开一条独立的分支branch。这个流程对应到真实场景就是你今天上午接到一个需求先 pull 一下拿到别人昨晚推上去的代码新建一个分支开始开发中途改完几个文件就 commit 一次作为安全存档全部搞定后把分支 push 到 GitHub再提交合并请求让同事审查。等你下次换一台电脑继续干活第一件事又是 clone 或者 pull把最新代码拉到本地。六个操作循环往复覆盖了你 80% 以上的 Git 使用场景。2. 动手前的准备工作安装、配置与第一次连通工具讲得再热闹电脑上没装 Git、GitHub 账号没配对一切都白搭。我见过很多教程直接开讲命令结果新手照着敲报错一个接一个第一关就劝退了。所以这一章先把准备工作讲透你花 20 分钟搞定后面会顺畅得多。2.1 Git 安装到底装什么Windows / macOS / Linux先说说最容易纠结的安装环节。Windows 用户我推荐直接去 Git 官网下载安装包一路默认选项点到底就行唯一要注意的是安装过程中有一个调整 PATH 环境的选项保持默认的 “Git from the command line and also from 3rd-party software” 即可。这样装完后系统里会多出 Git Bash、Git CMD 等入口日常使用我强烈建议打开 Git Bash它模拟了 Linux 终端环境指令行为和后续教程里写的最一致省去很多 Windows 命令差异带来的困惑。macOS 用户有三种装法如果机器上已经装了 Xcode Command Line Tools直接在终端敲 git --version 会触发系统自动安装也可以用 Homebrew 执行 brew install git还可以去官网下载 pkg 安装包。对于日常开发来说第一次自动弹出的安装提示完全够用不必折腾 Homebrew。Linux 用户最简单Debian/Ubuntu 系执行 sudo apt install gitRedHat/CentOS 系执行 sudo yum install git装完即用。安装完成后务必验证一下在终端输入 git --version如果看到类似 git version 2.39.2 的输出说明安装成功。这一步很多人跳过结果后面敲 git 命令一直提示“无法识别”其实压根是没装好或者装完没重开终端。2.2 验证安装与写清自己的身份Git 装好以后第一步不是急着去 clone 别人的仓库而是告诉 Git “你是谁”。因为每一次提交都会记录作者信息如果身份没配置提交时 Git 会报错或者写入一串奇怪的名字。配置身份用两条命令把内容换成你自己的信息git config --global user.name 你的名字 git config --global user.email 你的邮箱这里的 --global 参数表示全局生效意思是这台电脑上的所有仓库默认都用这个身份。如果你在某个项目里换了账号也可以进到项目目录后去掉 --global 重新设置一次那样只对当前仓库生效。建议填 GitHub 注册时用的邮箱这样你在 GitHub 上的提交记录能和账号正确对应上。配置完后可以用 git config --list 查看当前所有配置项确认 user.name 和 user.email 都已经存在。这一步很多教程会放在很后面讲但我建议你拿到新电脑就先配置好省得第一次提交时手忙脚乱。2.3 HTTPS 与 SSH 两种连接方式怎么选本地 Git 要跟 GitHub 仓库通信有两种主流方式HTTPS 和 SSH。它们的区别可以类比成“进门刷访客码”和“拿钥匙直接开锁”。HTTPS 方式下每次 clone 一个仓库你都要在链接里带上用户名和访问令牌推送时也需要验证身份。GitHub 从 2021 年 8 月起已经不再支持用账号密码直接推送代码而是要求使用 Personal Access Token个人访问令牌。这个令牌就相当于一张“限权限的临时身份证”你可以只给它 repo 权限就算泄露了也能单独撤销风险比密码小得多。生成入口在 GitHub 的 Settings - Developer settings - Personal access tokens。SSH 方式是生成一对密钥私钥留在你电脑上公钥添加到 GitHub 账号里。之后 clone、push、pull 都不用再输账号密码只要私钥在你的电脑就相当于有一把开门钥匙。生成密钥的命令是ssh-keygen -t ed25519 -C 你的邮箱一路回车然后用 cat ~/.ssh/id_ed25519.pub 查看公钥内容复制整段粘贴到 GitHub 的 Settings - SSH and GPG keys - New SSH key 里。测试是否连通可以执行 ssh -T gitgithub.com如果看到成功认证的提示就说明配对完成。我的建议是小白最开始用 HTTPS 配合 Personal Access Token因为概念上更好理解出错提示也更直观等用熟了再切到 SSH体验会清爽很多。不过无论哪种方式切记不要把私钥或者 token 发到聊天窗口、粘贴到代码仓库里它跟你的密码同等重要。2.4 GitHub 页面打不开、克隆很慢时先做这些排查很多新手在准备阶段就被 GitHub 页面打不开、clone 速度奇慢劝退了。这里我想先泼一盆冷水GitHub 是一个架设在海外机房的服务访问稳定性和你本地网络环境直接相关它本来就不保证在你所处的位置任何时刻都流畅所以“打不开”并不一定是你配置错了。遇到这种情况先做个简单的分级排查第一步打开浏览器访问 GitHub 官网如果网站能打开但很慢说明网络链路通只是延迟偏高耐心多等几秒如果完全打不开换个浏览器、换个网络环境比如手机热点试试第二步如果换了环境还是不行再考虑是不是公司、学校等场所的网络策略对海外站点有限制这种时候可以咨询本地的网络管理员或找一个网络状况更好的时段再操作。第三步确认域名解析是否正常可以在终端执行 nslookup github.com看能不能返回 IP 地址。这里额外说一点不要相信那些号称“破解版”“一键加速”的第三方工具它们要么有安全风险要么本身就是骗局。GitHub 是正规的代码托管平台正常通过浏览器访问、命令行操作就足够了。访问慢的问题最常见的解法反而是“错峰操作”和“耐心重试”很多过一会儿自己就好了。3. 小白高频六操作逐一拆解从克隆到分支准备工作做完下面进入正题。这六个操作我按使用顺序排列每一条都会讲清楚它是干什么的、怎么敲、执行后你会看到什么、容易在哪里翻车。建议你打开终端照着敲一遍。3.1 拿到项目先做的第一件事git clone当你看到一个不错的开源项目或者同事把一个仓库地址发给你第一步就是把远程仓库复制到本地。这个动作叫 clone克隆命令格式是git clone 仓库地址仓库地址从哪里拿进入 GitHub 仓库页面点击绿色的 Code 按钮会弹出 HTTPS、SSH 等标签页默认显示 HTTPS 地址点击复制按钮即可。如果你按上一章配置了 SSH 公钥也可以切到 SSH 标签页复制那个以 gitgithub.com 开头的地址。执行 clone 后Git 会在当前目录下生成一个和仓库同名的文件夹文件夹里不但有所有文件还藏着一个 .git 隐藏目录这个目录就是本地版本库的核心记录着提交历史、分支信息、远程地址等元数据。你平时改代码只需要关注外面的文件千万别去动 .git 目录。第一次 clone 时终端会显示类似 remote: Enumerating objects 的进度信息这是 Git 正在从远程服务端接收数据。如果网络状况不佳这个过程可能会卡住或者报 fatal: unable to access多数情况下是网络波动重试几次往往能成功。clone 完成后再执行 ls 或者进入项目目录你会看到文件已经整整齐齐躺在本地了。这里有个小经验想在哪个目录下存放项目就在哪个目录打开终端再执行 clone。很多人默认在用户主目录下敲命令结果项目散落得到处都是建议先 mkdir 建一个专门放代码的文件夹比如 ~/projects再进去克隆。3.2 每次动手前养成习惯git status 与 git add现在你已经打开一个本地仓库开始改代码。改了几行之后你想知道“到底哪些文件被动过”这时用 git status。这个命令会列出所有发生变化的文件是新文件、被修改的文件、还是删除了的文件一目了然。我强烈建议把它当成一个“手电筒”每次提交前先照一遍确认自己即将提交的东西是预期之内的。git status 输出的核心信息分两块Changes not staged for commit修改了但还没加入暂存区的文件和 Untracked files新创建但还没被 Git 跟踪的文件。前者通常用红色显示后者则出现在单独一节里。不要看到红色就慌张这只是 Git 在告诉你“这里有变化”。接下来要让 Git 真正记录这些改动需要把它们加入暂存区命令是 git add。暂存区可以理解成“购物车”你逛超市时先把想买的挑进购物车最后再统一去结账。加入暂存区最常见的两种用法git add 文件名.py # 只添加指定文件 git add .上面命令中的 git add . 表示把当前目录下所有改动都加入暂存区。新手容易偷懒每次都直接 git add .但我建议你先用 git status 看清楚改了什么再决定用什么范围去 add。因为有时候你会编译生成一些临时文件、日志文件、缓存文件这些并不该提交到仓库一次性全 add 进去会污染提交历史。专业一点的仓库会通过 .gitignore 文件自动忽略这些文件但新手阶段宁可手动挑一下。add 之后再次执行 git status你会看到刚才的文件变到 Changes to be committed 节下面颜色也变成绿色这说明它们已经安安静静躺在暂存区里等待下一步提交了。3.3 真正保存版本git commit手头的代码改完也加入了暂存区这时候就该拍下“时间定格照片”了git commit。这个动作会把暂存区里的所有改动打包成一个提交记录写进本地版本库。最常用的命令格式是git commit -m 提交说明提交说明commit message非常重要它是给这次改动写的“便签”将来你或者同事回看历史时全靠它快速理解这次提交干了什么。我的建议是说明里包含“做了什么”和“为什么做”比如 fix: 修复登录页在移动端布局错乱的问题 就比 update 有价值得多。很多团队还会约定前缀例如 fix、feat、docs便于在历史列表里分类检索你就算不加入这种规范至少也要让说明看一眼就懂。commit 之后终端会显示类似 1 file changed, 3 insertions() 的输出表示这次提交修改了 1 个文件增加了 3 行。如果只想快速提交当前所有已跟踪文件的改动也可以使用 git commit -am 说明不过这个命令会跳过暂存区直接提交已跟踪文件的改动对于新文件是不生效的所以我仍然建议你按“status 看清楚 - add 挑好 - commit”这个节奏来不要图省事。一个常见的困惑是我 commit 之后代码上传到 GitHub 了吗答案是没有。commit 只保存在你的本地版本库GitHub 上还是老样子。这也就引出下一个操作push。3.4 从本地到远端git push 与首次推送把本地提交同步到 GitHub 上用的是 git push。它的理解方式很简单本地有一份版本历史远程有一份版本历史push 就是把你本地新增的提交“推送”到远程仓库里。如果你是在本地 clone 下来的仓库并且没有切换分支直接执行 git push 通常就能把当前分支的提交推上去。但如果你是先把远程仓库 clone 下来然后在本地新建了分支并做了提交第一次推送时需要指定远程分支并建立关联命令是git push -u origin 分支名这里的 origin 是远程仓库的默认别名相当于给那一串又长又难记的仓库地址起了个小名-u 的作用是设置上游分支告诉 Git“本地的这个分支以后默认推送和拉取都跟远程的对应分支关联”。设置过后以后在这个分支上直接敲 git push 就够了。新手经常会遇到推不上去的各种报错其中最常见的两类都和“身份验证”有关。如果你使用的是 HTTPS 地址GitHub 会要求输入用户名和 Personal Access Token很多人在这里输成了自己的登录密码就会反复失败。解决办法是生成一个 token然后把它当作密码粘贴进去。如果用的是 SSH 地址报错信息通常是 permission denied (publickey)说明本机私钥和 GitHub 上的公钥没配对成功回到 2.3 节重新核对一遍密钥配置。推送成功后你可以回到 GitHub 仓库页面刷新一下看到代码已经变了这就是“配合”最直观的感受本地 commit 是离线存档push 才是让 GitHub 也知道的同步动作。3.5 开工前先同步git pull多个协作成员共用一个远程仓库时别人可能会在你工作期间推送了新代码。你本地仓库还停留在旧版本直接在上面继续改很容易和别人的改动冲突。所以每天开工前、或者准备在某台新电脑上继续干活时第一件事应该是 git pull。pull 做的事情可以拆成两步先 fetch把远程仓库的最新提交下载到本地再 merge把这些提交合并到你当前所在分支。理解了这个底层逻辑你就不难明白为什么有时候 pull 会“莫名失败”——不是代码丢了而是远程和本地在同一个位置都有了不同的改动Git 不知道怎么自动合并只能停下来让你决定。执行 git pull 后终端会显示类似 Already up to date 或 Updating 加上文件列表的信息。前者表示本地和远程一致没有新东西可拉后者表示确实拉到了新提交。如果远程有别人改了而你本地还没改过的文件Git 会自动完成合并如果两边都改了同一个文件的同一段代码Git 就会报告 CONFLICT并把冲突标记写进文件里。我在实操中养成的习惯是“先 pull 再开工”哪怕只是改一行注释也会先同步一下。另外一个更安全的小技巧在 pull 之前如果本地有未提交的改动先用 git status 看清楚必要时先 commit 或暂存一下。如果本地有改动且和远程改动重叠pull 可能会报错让你先“commit your changes”这时候先把本地改动提交掉再来 pull比强行丢弃改动可靠得多。3.6 多开一条线干活git branch 与分支切换分支是 Git 最强大的设计之一也是很多人学了命令却不理解为什么需要它的地方。用一句话概括分支让你可以在同一条主线上“岔出去”一条工作线在这条线上随便折腾不影响别人也不污染主干。为什么要这么做假设你们团队的 main 分支始终是稳定可运行的版本你要开发一个新功能直接改 main 的风险很大做到一半功能不稳定别人一拉代码就把整个项目带崩。正确的做法是从 main 拉出一条分支比如叫 feature/login你在上面写代码、提交、推送等全部搞定测试通过后再把这条分支合并回 main。这样 main 始终是可靠的其他同事也不会被你的半成品干扰。新建并切换分支的命令git checkout -b feature/login # 较旧的写法 git switch -c feature/login # Git 2.23 之后的新写法这两条命令都是在“新建分支”的同时“切换过去”效果完全一样。查看当前仓库所有分支可以用 git branch -a输出列表里带星号的那一列就是你现在所在的分支。切换回已有分支用 git checkout 分支名 或者 git switch 分支名。注意切换分支时如果本地有未提交的改动Git 可能会拦住你或者把改动带过去所以每次切换前建议先 commit 或者 stash保持工作区干净。分支本身的操作不算难真正的难点在“合并”和“冲突”。当你在 feature 分支上开发完想合并回 main思路是先切回 main执行 git pull 确保 main 已经是最新然后再执行 git merge feature/login把功能分支的提交合并进来。如果两边改的文件不冲突Git 会自动完成合并如果冲突就会出现前面 pull 时提到的情况需要打开冲突文件手工保留正确的内容然后 git add、git commit 完成合并。这里给小白一个非常实用的建议合并前先想清楚自己是在哪条分支上。很多人开着 feature 分支干着活一激动直接 git merge 把别的分支合并进来结果分支关系乱成一团。每次都先用 git branch 确认当前分支建立肌肉记忆后面会少很多麻烦。4. 常见问题与排查技巧实录学了命令并不代表不会翻车恰恰相反报错才是新人进步最快的时候。很多问题第一次看到时觉得天要塌了实际上就那么几个固定套路。我按自己这么多年见过的“高频踩坑”整理了一份速查手册你遇到问题了直接对着查。4.1 高频报错速查表报错信息出现原因解决方向git 无法识别为 cmdlet、函数...Git 未安装或安装后未重开终端重装 Git重开终端再试fatal: not a git repository当前目录不是仓库或仓库目录不对用 cd 进入仓库目录再执行fatal: unable to access网络问题或仓库地址不对检查网络核对地址repository not found地址错误或没有该仓库访问权限确认仓库存在、账号是否有权限remote origin already exists仓库已配置过远程地址重复添加用 git remote set-url origin 新地址 修改fatal: refusing to merge unrelated histories两个仓库历史不相关确认确实要合并后可用 --allow-unrelated-histories但不建议盲目使用permission denied (publickey)SSH 公钥未配置或密钥不匹配回到 2.3 节重新配置公钥authentication failedHTTPS 方式下用户名或 token 错误用 Personal Access Token 代替密码CONFLICT (content): Merge conflict合并时两边改动了同一位置手工解决冲突git add 再 commit这张表不用背收藏起来用到的时候翻一下就行。我特意没有把所有可能的报错都列出来因为新手阶段你先看这十个就够应付 90% 的场景了。4.2 改错文件如何反悔Git 最吸引人的地方就是“能反悔”但要分清楚后悔到什么程度不同的状态有不同的撤销方式。如果你改了文件但还没执行 git add想放弃这些改动可以用 git restore 文件名工作区会恢复到上次提交时的状态。如果你已经 git add 了但还没 commit可以用 git restore --staged 文件名作用是把文件从暂存区“撤出来”但保留工作区的修改。如果你已经 commit 了但后悔这条提交的说明想改说明可以用 git commit --amend这会修改最近一次提交的说明注意它会生成一个新的提交 ID所以只适合尚未推送到远程的提交。很多新手一搜“git 撤销”就搜到 git reset 相关的命令看得云里雾里。我建议你先不要碰 reset尤其是带 --hard 参数的 reset它的作用是直接丢弃提交历史威力极强用错了会丢掉工作成果。先掌握 restore 这一族命令就够日常反悔了等你真正理解了提交历史树再去研究 reset 也不迟。说到底反悔的前提是“提交得够勤”。如果改一个功能从头到尾只 commit 了一次中间过程全部没有存档那就算 Git 本事再大也没法帮你找回中间某个时刻的内容。这也是我为什么在前面反复强调“分阶段 commit”。4.3 小白最容易踩的三个坑第一个坑是“本地 commit 了就以为万事大吉”。很多人 commit 完直接关电脑第二天发现 GitHub 上什么都没有因为根本没 push。本地 commit 只是保存到自己的电脑里别人看不到也拿不到只有 push 之后 GitHub 才有备份。我在自己带新人时会反复让他们记住一句话commit 是“保存在本地”push 是“同步到云端”两者缺一不可。第二个坑是“身份信息不统一”。有人在自己电脑上把 user.name 配成中文网名去公司电脑配成英文名结果 GitHub 上的提交历史断断续续头像也对不上看起来就像好几个人在写代码。建议所有设备统一使用 GitHub 昵称和注册邮箱可以用 GitHub 的 noreply 邮箱来避免泄露真实邮箱总之要保证“作者身份”稳定一致。第三个坑是“把密钥和令牌当普通文本到处发”。Personal Access Token、SSH 私钥、甚至 GitHub 登录密码都是敏感信息。有的人图方便把 token 写在仓库里的配置文件里提交上去这等于把家门钥匙放在门上挂着。万一 token 泄露了GitHub 会在安全提醒里提示你你需要立刻去 Settings 里撤销这个 token重新生成一个。4.4 再聊两句网络问题最后再集中回答一下很多人问的“GitHub 页面打开慢、clone 没速度”的问题。我前面说过GitHub 服务器架设在海外访问快慢受本地网络环境影响很大这不是某个人的奇难杂症而是很多人都遇到过的正常现象。我的处理建议是不要一卡就卸载重装先确认问题范围。用浏览器打开一个无关紧要的海外网站如果也慢那基本就是你当前网络环境对海外站点都不太友好可以尝试切换网络、使用手机热点或者干脆换个时间再操作。如果只有 GitHub 出问题可以试试清空 DNS 缓存、换一个公共 DNS 服务器再就是检查本机代理设置是否影响到了 Git 的请求。还有一点容易被忽略服务器上的 Git 仓库 clone 通常没问题但有些企业网或校园网会限制特定端口。GitHub 的 SSH 走 22 端口HTTPS 走 443 端口如果 22 端口被限制SSH 方式的 clone 就会失败。遇到这种情况可以尝试把 SSH 换成 HTTPS 方式或者按 GitHub 官方文档改用 443 端口做 SSH 连接。这种问题的排查思路是固定的先缩小范围再针对性地换协议重试基本都能定位到原因。从第一次敲 git clone 时的好奇到现在每天几十次 push、pull、branch 切换我最大的感受是Git 和 GitHub 的配合并不需要你把所有命令背得滚瓜烂熟你只要吃透几个高频操作的原理剩下的命令都是遇到问题时再查再学。这篇文章写的这几个操作是团队开发里出现频率最高的“主链路”把它们练到形成肌肉记忆你会发现版本管理不但不是负担反而帮你挡掉了无数次误删、返工和协作混乱的灾难。我个人在实际使用中的体会是一定要建立“小步提交、勤于同步”的习惯。宁可一次提交只改一个问题也不要把一堆功能揉成一次提交宁可每天多 push 几次也不要把代码憋在本地一周才上传。版本管理的价值不在“多”而在“稳”——你每次提交都是一个可以安全返回的锚点把这些锚点铺得越密你在这条开发路上就能走得越安心。最后再分享一个小技巧如果你对这些操作还是记不住就自己建一个测试仓库随便放几个文本文件把 clone、add、commit、push、pull、branch 从头到尾反复演练两遍出错了就删掉重来。真实项目里兵荒马乱测试仓库里可以随便折腾。等你折腾明白再面对别人的项目时心里就有底了。