ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

30分钟Git入门到实践:建仓、提交、协作全流程

30分钟Git入门到实践:建仓、提交、协作全流程 很多刚接触 GitHub 的朋友第一反应是去搜各种教程结果一搜几百页看完更懵。这个生态里概念太多分支、PR、Fork、Issue、Workflow每个词单独看都能找到一堆解释但真正上手敲命令的时候还是不知道先干哪个。我带过不少新人也踩过不少坑最后总结下来的经验是入门 GitHub 根本不需要啃完文档只要把一条核心链路跑通——建仓、提交、协作剩下的全是细节。这篇文章就是按这个思路写的精炼实操版目标是 30 分钟内让你从零开始完成一次完整的 GitHub 协作流程。这个教程不会讲那些一年都用不上一次的高级技巧而是把最常用的操作和背后的原理讲透。建仓解决的是“代码放哪里、怎么初始化”的问题提交解决的是“代码怎么安全地存进去、怎么留痕迹”的问题协作解决的是“多人怎么同时改代码、怎么合并”的问题。只要你跟着把这三件事走一遍后面再遇到陌生概念心里会有一个清晰的坐标。1. 建仓前先把几个概念理清楚1.1 Git 和 GitHub 到底是不是一回事这是新手最容易混淆的点。简单说Git 是工具GitHub 是平台。Git 是一个版本控制软件装在你自己的电脑上负责记录代码每一次改动GitHub 是建立在 Git 之上的代码托管网站给 Git 仓库提供了一个远程存放的位置还额外提供了协作功能。打个比方Git 像你游戏里的存档系统可以随时保存进度、读档、开分支体验不同的剧情走向GitHub 则是把存档传到云端让队友也能看到你的存档甚至基于你的存档继续玩。没有 GitGitHub 就只是个普通的文件存储站没有 GitHubGit 的协作能力也会大打折扣。理解了这层关系后面的命令就好懂了。你在本地用 Git 做的所有操作——commit、branch、merge——都是在一个叫“仓库”的东西里进行的。仓库可以理解成一个特殊的文件夹Git 会悄悄记录这个文件夹里所有文件的历史状态。1.2 30 分钟的节奏怎么安排我推荐的路径是三步走时间分配大致如下第 0-5 分钟注册/登录 GitHub创建一个远程仓库搞清楚仓库页面上的核心区域。第 5-20 分钟在本地安装 Git配置身份信息把一个本地项目推送到远程仓库完成提交链路。第 20-30 分钟模拟一次真实协作通过分支和 Pull Request 完成一次代码合并。这个安排刻意把理论压缩到了最低。你在实操过程中遇到问题再去查概念比先啃概念再动手要高效得多。我见过太多人花一周学 Git 分支模型最后真正需要用的只有 add、commit、push 三条命令。2. 建仓从一个空仓库开始2.1 在 GitHub 网页端创建仓库的完整步骤打开 GitHub 官网并登录账户后点击右上角的加号选择 New repository就进入了建仓页面。这里有几个需要注意的地方Repository name仓库名必须是全站唯一的至少在你自己的账号下唯一。命名建议用短横线分隔的小写英文比如 my-awesome-project不要用空格或中文。Description描述一句话说明这个仓库是干什么的虽然可以留空但强烈建议填。这个描述不仅方便别人理解项目也影响仓库在搜索引擎上的曝光。Public / Private公开/私有公开仓库所有人都能看到私有仓库只有你授权的人能看到。学习阶段建议选 PublicGitHub 社区很大程度上是建立在公开代码的互相学习之上的。Add a README file添加说明文件建议勾选这样仓库会自动生成一个 README.md 文件用来介绍项目。创建完成后会跳转到仓库主页。这个页面以后你会非常熟悉——上方是代码文件列表Code 标签页右侧是 About 信息栏中间是提交记录Commits、分支Branches、发布Releases和贡献者Contributors的入口。你暂时不需要理解每一个按钮只需要知道代码从哪看、提交记录从哪点就行。提示仓库主页的绿色 Code 按钮非常关键。它是你本地代码和远程仓库建立联系的入口里面提供了 HTTPS 和 SSH 两种克隆地址后面会用到。2.2 本地 Git 安装与身份配置网页端建好仓库只是搭了个空壳真正写代码的工作在本地完成。安装 Git 这一步没什么难度Windows从 Git 官网下载安装包一路默认选项安装即可。安装完打开 Git Bash会随 Git 一起安装。macOS在终端执行xcode-select --install或者通过 Homebrew 执行brew install git。LinuxUbuntu/Debian执行sudo apt install git。装完后打开终端先验证一下版本git --version能打印出版本号就说明安装成功。但这还不算完Git 第一次使用前必须配置身份信息否则你没法提交代码。这个身份会写进每一次提交记录里相当于你的“签名”。git config --global user.name 你的名字 git config --global user.email 你的邮箱这里有个非常关键的点邮箱最好和你注册 GitHub 时用的一致。如果不一致你的提交虽然能推上去但 GitHub 无法把它和你账号关联起来贡献图和提交记录会“张冠李戴”。这个超级常见我见过很多新人提交了好多次才发现贡献图上灰扑扑一片一查全是 email 没对上。2.3 两种关联远程仓库的方式HTTPS 还是 SSH本地要和一个远程仓库建立关联有两种常用协议HTTPS 和 SSH。HTTPS 最简单克隆或推送时输入 GitHub 用户名和密码现在一般用 Personal Access Token后面会提到。缺点是每次推送都要验证身份虽然可以配置缓存但初次使用略显繁琐。SSH 则是一劳永逸你生成一对密钥把公钥放到 GitHub 账户里之后所有 Git 操作都自动完成身份验证不用再输密码。对于以后要长期和 GitHub 打交道的人来说SSH 是更推荐的方式。生成 SSH 密钥的命令如下ssh-keygen -t ed25519 -C 你的邮箱一路回车即可会生成一对文件私钥在~/.ssh/id_ed25519公钥在~/.ssh/id_ed25519.pub。然后把公钥内容复制出来cat ~/.ssh/id_ed25519.pub复制完整输出打开 GitHub - Settings - SSH and GPG keys - New SSH key粘贴保存。最后验证一下ssh -T gitgithub.com看到类似Hi username! Youve successfully authenticated的输出就说明 SSH 通道通了。这一步虽然多花了点时间但值得。3. 提交把本地代码安全地送进仓库3.1 一次标准提交的四个动作有了本地仓库和远程仓库接下来就是把代码从本地推到远程。这个过程中你会反复接触四个基础命令git init # 把当前目录变成一个 Git 仓库 git add . # 把文件纳入暂存区 git commit -m 提交说明 # 把暂存区的改动固化成一个记录 git push # 把本地记录推送到远程如果你是在本地新建了一个项目目录想把它推送到 GitHub 上刚建好的空仓库完整流程是这样# 进入项目目录 cd my-awesome-project # 初始化本地仓库 git init # 添加所有文件到暂存区 git add . # 提交到本地仓库 git commit -m Initial commit # 关联远程仓库注意替换成你的仓库地址 git remote add origin gitgithub.com:你的用户名/my-awesome-project.git # 推送并设置上游分支 git push -u origin main逐个动作拆解一下。git init做的是初始化一个隐藏的.git文件夹从这一秒开始这个目录里的任何变化 Git 都会盯着。git add .里面的点代表当前目录所有文件这些文件被放进了“暂存区”你可以把暂存区想象成一个购物车先挑好东西放进去付款时统一结算。git commit -m Initial commit就是结算动作生成了一个不可变的提交记录。而git push则是把本地购物车里的记录同步到云端。-u参数的含义是设置上游分支它的作用是给本地分支和远程分支建立关联。只设置一次之后直接用git push就能推送到对应远程分支。3.2 提交信息怎么写才专业提交信息commit message是 GitHub 上最容易暴露“新手感”的地方。很多人图省事写update、fix bug、111短时间看没问题但三个月后回看历史记录根本不知道当时改了什么。我建议从第一天就养成写规范提交信息的习惯。目前社区最通用的是 Conventional Commits约定式提交风格格式很简单type(scope): subject其中 type 是提交类型常用的有feat新功能fix修复 bugdocs只改文档style代码格式调整不影响逻辑refactor重构不修 bug 不加功能perf性能优化test测试相关chore构建、依赖等杂项scope 是影响范围比如模块名可以省略。subject 是一句话描述。举个例子feat(user): 新增用户注册功能 fix(cart): 修复购物车数量为负数时崩溃的问题这种规范有三个实际好处。一是代码评审时一眼看出这次改动的性质二是自动生成 CHANGELOG 时可以直接按类型聚合三是用git bisect二分定位 bug 引入点时清晰的提交历史能大幅缩小排查范围。注意提交信息要用祈使句或简洁描述不要写情感色彩。还有一条铁律——永远不要提交本地配置文件、密钥、编译产物等这些应该写进.gitignore文件里。否则一旦密钥泄露并推送泄漏的凭据就是致命的。3.3 不想用命令行VS Code 图形界面提交更直观如果你的主要编辑器是 VS Code可以不背命令也能完成同样的动作。VS Code 左侧有一个源代码管理图标类似分叉的树枝点开后你会看到更改列表显示所有修改但未暂存的文件右边有号点击即可完成git add。暂存更改显示已暂存的文件上方输入框填提交信息点击勾选图标即完成git commit。推送按钮在左下角分支名旁边点击即可执行git push。这套图形界面和命令行底层逻辑一模一样都是 add - commit - push 三步。对于初学者我反而是建议图形界面和命令行交替着用。图形界面帮助你理解“文件在哪个区”命令行帮你精确控制“我到底执行了什么操作”。都熟悉之后你会发现日常开发大部分时间还是用命令行更高效。4. 协作多人改动如何合到一起4.1 分支给代码世界开一条平行线前 30 分钟的前 20 分钟我们都是在自己的单线上操作。但真实项目一定是多人在同一个仓库里同时开发。如果没有分支两个人同时改同一个文件后推送的人会直接覆盖先推送的人——这会导致严重的代码丢失。分支机制就是为了解决这个问题。分支的本质是一个指向提交记录的指针。git branch命令创建一个新指针git checkout或git switch切换指针位置。实际开发中常用的协作模式是从主分支main切出一个新分支git switch -c feature/login在这个分支上正常提交代码把该分支推送到远程git push origin feature/login在 GitHub 上发起 Pull Request代码评审通过后合并到主分支因为每个人在自己的分支上互不干扰所以同时开发多个功能完全不会产生冲突。代码冲突只发生在合并那一刻当两个人都改了同一段代码Git 不知道该听谁的才会要求你手动解决。主分支main始终应该保持所有功能合入后的完整状态尽量不要直接在主分支上写新功能。这个习惯和 Git 本身关系都不大而是团队工程纪律问题。4.2 Pull Request协作的精髓Pull Request简称 PR是 GitHub 上最核心的协作机制。它的本质是你请求仓库维护者“拉取”你的分支代码并合并进去。但它的价值远超“合并代码”本身——它还带着一段讨论空间和代码评审环节。完整流程是这样的你把自己的分支 push 到远程仓库。打开 GitHub 仓库页面会看到一个醒目的“Compare pull request”按钮。点击进入 PR 创建页确认 base要合并到的目标分支通常是 main和 compare你的功能分支无误。填写 PR 标题和描述。好的 PR 描述应该包括改了什么、为什么改、怎么测试、有没有破坏性变更。提交 PR 后仓库维护者或其他协作者会在 PR 下面逐行评论代码、提出修改意见。你根据意见继续在功能分支上提交代码PR 会自动更新。所有人达成一致后点击 Merge pull request 完成合并。看起来流程长但它解决了一个致命问题在代码进入主分支前先经过人眼审查。很多低级 bug、风格问题、安全隐患都是在这个环节被拦下来的。哪怕你是自己一个人做开源项目我也建议用 PR 流程而不是直接 push 到 main因为它让你养成的提交习惯和评审意识会在团队合作中受益无穷。对于大型开源项目一般还有一个前置动作Fork。Fork 是把别人的仓库复制一份到你自己的账号下你可以在自己的副本上任意修改改好了再通过 PR 把改动提交回原仓库。这就是 GitHub 上万千开源项目协作的基本模式。4.3 Code Review 和 Issue 协作的基本玩法除了 PRIssue问题/议题是 GitHub 协作的另一根支柱。Issue 是项目里的任务和讨论区可以报告 bug、提议新功能、讨论技术方案。一个规范的协作流程通常长这样需求方可能是产品经理、用户或者其他开发者在 Issue 中描述需求或 bug。维护者在 Issue 里讨论方案、打标签label比如bug、good first issue、enhancement。开发者认领 Issue或者在 Issue 下留言基于 main 分支创建功能分支。完成开发后提交 PR并在 PR 描述中加上Closes #123这样的关键词#123是 Issue 编号。合并 PR 后GitHub 会自动关闭对应的 Issue形成需求从提出到落地的完整闭环。这个机制让项目的每一个改动都有迹可循需求在 Issue 里找得到代码改动在 PR 里找得到PR 和 Issue 之间又有引用关系。这就是为什么开源项目动辄上千个 commit 还能保持较高的可维护性——不是靠记忆力而是靠流程沉淀。5. 实操中绕不开的坑高频问题与排查实录5.1 push 一直转圈或超时怎么办在国内网络环境下访问 GitHub偶尔会遇到克隆或推送速度很慢、甚至连接超时的情况。先说结论大部分时候这不是你操作的问题而是网络状况的问题。遇到这种情况我一般按顺序排查检查本地网络换个时间重试或者切换网络环境比如手机热点调换网络出口。检查git remote -v确认仓库地址没有拼错如果当时选了 HTTPS也可以改成 SSH 对比一下。配置 DNS把系统 DNS 切换到公共 DNS如 223.5.5.5 或 8.8.8.8有助于改善某些域名解析异常导致的连接故障。千万不要去搜索各种打着“加速”“一键破解”旗号的可疑工具。这类工具大多需要你授权极高的系统权限有的甚至直接读取你的私钥和密码为了省几分钟导致账号被盗或代码泄露风险完全不成比例。如果你所在的组织或学校有合规的网络接入要求直接咨询网络管理员即可。5.2 commit 时报错 “Author identity unknown”这是新手高频报错。完整信息一般是Author identity unknown *** Please tell me who you are.原因非常简单你还没配置user.name和user.email。Git 不知道这个 commit 该署名是谁。解决方法git config --global user.name 你的名字 git config --global user.email 你的邮箱配置完再执行git commit就正常了。另外还有一个类似的问题提交记录里你的头像和名字不显示或者灰色。这就是前面提到的邮箱不匹配问题。GitHub 是靠提交邮箱来识别用户身份的你本地配置的邮箱必须和 GitHub 注册邮箱一致或者至少是你“已验证明邮箱”列表里的地址。5.3 git push -u origin main 被拒绝non-fast-forward报错信息通常是! [rejected] main - main (non-fast-forward) hint: Updates were rejected because the remote contains work that you do not have locally.这种“non-fast-forward”非快进式拒绝的原因是远程仓库里有你本地没有的提交。比如你在网页端勾选了 “Add a README file”仓库初始化时就自动提交了一个 README而你本地是空仓库两边历史分叉了。解决思路是把远程的更改先拉下来合并再推上去# 拉取远程仓库 git pull origin main --allow-unrelated-histories # 解决冲突如果有 # 推送 git push origin main--allow-unrelated-histories这个参数告诉 Git允许合并两个没有共同祖先的历史。如果你确实确定远程那个 README 不要了也可以用git push -f强制覆盖但建议别一开始就用-f因为强制推送可能覆盖别人的提交对协作项目非常危险。5.4 问题快速排查对照表现象常见原因处理方向push 超时网络连接问题 / DNS 解析异常重试、切换网络、检查 DNS 配置commit 提示 Author identity unknown未配置 user.name / user.email执行 git config 全局配置push 被拒绝 non-fast-forward远程有本地没有的提交git pull 后重新推送push 报 permission deniedSSH 密钥没配好 / 不是仓库协作者检查 id_ed25519.pub 是否已添加确认仓库权限上传了大文件被服务器拒绝仓库包含超过 100MB 的文件用 git lfs 处理大文件或移除大文件后重推提交记录里没有账号头像提交邮箱与 GitHub 邮箱不一致更新本地 git config 的 email排查问题的总原则是先读报错信息再搜关键词最后动手。我见过太多人遇到报错不读提示直接复制粘贴去搜索引擎其实大部分报错信息已经把原因和解决方向写得明明白白了。6. 把基础链路跑通之后进阶方向往哪走6.1 下次遇到“复杂问题”的应对思路30 分钟能跑通的是主线任务但真实项目里总有支线任务。等你把上面的流程练熟了后面会遇到的新概念其实都有规律可循。比如git cherry-pick它解决的是“我只想把某个分支的一个提交拿过来而不是合并整个分支”。用法是git cherry-pick commit-hash比如git rebase解决的是“我的分支落后主分支了想把自己的改动重新接到最新提交之上”一条git rebase main就能把分支基础更新到最新。这两个命令都涉及到“改写历史”对新手来说容易产生混乱。我的建议是没有彻底理解之前优先用git merge。它操作简单、历史清晰、出问题容易回滚。等你什么时候对 Git 内部机制有感觉了再慢慢尝试 rebase 和 cherry-pick。6.2 怎么从高星项目中真正学到东西GitHub 的搜索和 Explore 页面可以帮你找到海量开源项目。给新手的建议是不要只会点 Stars要会用 GitHub 来“读代码”。看一个陌生项目时按这个顺序来先看 README理解项目是干什么的、怎么安装、怎么用。再去看 Issues刚过滤good first issue标签看看新手任务通常长什么样。然后点开一个已合并的 PR看别人是怎么写 PR 描述的、怎么改代码的。最后才去看源码这时候你已经知道这个项目解决什么问题、代码大概在哪些目录顺着入口读会轻松很多。星标数量是项目热度的参考但不是质量的唯一标准。一个文档完善、Issue 响应及时、PR 规范的中小型项目你从里面学到的东西往往比一个几万星的大项目更多因为大项目对新手来说代码量太大很难切入。这个内容后续还可以这样扩展尝试给一个你常用的开源项目提交一个 typo 修复修改文档里的错别字这是最无门槛、也是最安全的 PR 入门方式。别觉得修错别字太简单它让你走完的一整套流程——Fork、创建分支、提交、发起 PR、等待维护者反馈——和以后提交一个新功能 PR 的路径是完全一样的。我第一次提 PR 时紧张得反复检查了八遍现在回头看那次只改了一个单词但正是那个 PR 让我把 GitHub 协作流程刻进了肌肉记忆。每个人的 GitHub 进阶之路都始于一次微不足道的 commit先跑通再跑好你迟早会用熟练到可以把它写进简历里的程度。
返回列表