Git版本控制完整教程

Git版本控制完整教程 1、Git简介与核心价值1.1、Git在开发中的核心作用Git 在开发中可以管理好我们的代码包括代码的更改、删除、合并等极大提升团队协作效率和开发效率。实际运用场景在学校给的作业任务中要我们敲一个记账系统作为结课作业我们团队一起去敲代码那么如何将代码中写的功能给其他人最笨的方法是直接通过微信将文件压缩发送出去但这个方法太慢了并且它会随着文件的内存的增加导致发送的时间会不断延长。这还只是一个简单的个人项目的前端部分仅实现了基础的增删改查功能文件体积就已经如此庞大别说之后功能完善的项目了如果直接把文件发送给队员就很浪费时间开发效率也会被拖累更不要说之后的功能新增和删除还需要手动的去发送接收文件。但如果我们会 Git 就不一样了我们可以把项目代码直接上传到 GitHub 上面其他队员只需要安装 Git 并注册 GitHub 账号通过 Git 命令就能轻松获取项目代码。通过这个实际的案例我们可以看到 Git 在团队协作中的巨大价值免去手动传输文件的麻烦实现代码的即时同步和版本管理。常识我们把代码上传到Github上时不仅仅要去把项目代码上传还要去配置gitignore文件这个文件是用来声明哪一些代码不需要去上传到Github上的比如说 node_modules 还有 .env.local 文件等特别是现在是 AI 迅速发展的时代AI 密钥是常用的这就需要把 AI 密钥写在 .env.local 里面这个文件是我们自己创建的现在的发展可以靠 AI 去生成这部分 Git 代码和 .gitignore 里面的声明文件也可以靠 AI 生成。注意这里的代码不是全部的代码因为项目要跑起来不仅仅需要关键的代码还需要对应的依赖外部库封装的函数方法所以这个时候我们可以使用终端运行 npm i 就可以安装项目运行起来需要的对应依赖了也就是主要安装node_modules 文件。我使用的是 VSCode Git 命令、npm 命令都在下面的终端运行快捷键是 ctrl shift ~ 。注意这里的括号不是快捷键的一部分。1.2、为什么每个开发者都必须掌握Git:在上面的 1.1 内容中我们可以看到 Git 在团队协作开发中的巨大优势但这还不足以说明为什么 Git 是每个开发者必须掌握的技能让我们从以下几个关键维度来分析1.2.1、技术架构优势分布式 VS 集中式Git 采用分布式版本控制架构这与传统的集中式版本控制系统如SVN有本质的区别。集中式版本控制系统所有的代码都存储在中央服务器中服务器一旦损坏整个团队将无法工作每次的提交、查看历史等操作都需要连接网络同时服务器损坏可能会导致代码历史丢失。分布式版本控制中每一个开发者的本地仓库都是完整的副本包含全部的历史记录即使断网也可以正常提交代码、查看历史操作、创建分支同时数据有多重备份可以极大降低丢失的风险方便我们灵活地与多个远程仓库协作。这种分布式架构让 Git 在可靠性、灵活性和协作效率方面都远超集中式版本控制系统。1.2.2、求职就业需求Git 已经成为技术岗位的硬性要求可以从多个维度得到验证在牛客网、力扣等技术社区查看优秀简历可以搜索到超过 90% 的开发者都将 Git 作为必备技能列出缺乏 Git 经验的简历在筛选阶段可能被淘汰掉。在 Boss 直聘等招聘平台上绝大多数前端、后端、全栈岗位都明确要求需要熟悉 Git 版本控制从初创公司到一线大厂Git 都是技术面试的基础考点。面试上Git 分支管理是面试中的高频考点常问问题包含分支策略、合并冲突解决、工作流规范等掌握 Git 能体现开发者的工程素养和团队协作能力。1.2.3、个人开发价值即使独立开发Git 也能为个人项目带来显著价值部署现代部署平台如Vercel、阿里云等都深度集成 Git 部署流程通常为推送代码到 GitHub自动触发部署流水线没有 Git 仓库很多一键部署功能都无法使用。此外GitHub 等代码托管平台已成为程序员的‘技术名片’优质的项目仓库是求职时的有力证明。代码管理效率版本历史记录能随时回退到任意版本避免操作损失分支的出现可以安全尝试新功能不影响主线开发进度云端存储代码可以有效防止本地数据丢失。开发流程标准化即使单人项目使用 Git 也能培养良好的开发习惯为未来参与团队开发打下坚实基础。2、版本库创建与基础概念2.1、Git 工作区与版本库关系2.1.1、工作区就是你电脑里能看见的项目目录你在这里直接编辑、新建、删除文件。可以看作是你的书桌你需要在书桌上摊开稿纸随意书写、修改、甚至揉碎废弃编辑、新建、删除等操作的草稿。2.1.2、暂存区一个存放在 .git 目录下的中间区域也被称为“缓存区”它像一个准备台或打包区。可以看作是书桌旁边的一个文件框你把觉得写的不错、准备最终提交的草稿页暂时放进这个框里面。2.1.3、版本库工作区内的隐藏目录 .git 这是 Git 的核心他自动会创建第一个分支 master 以及指向 master 的指针 HEAD 。可以看作是书桌上的档案柜你把文件框里整理好的草稿打上标签提交信息然后永久地存入档案柜你可以随时从档案柜里取出任何一份历史版本。2.2、git init -- 初始化本地仓库在项目根目录执行git init会在当前目录创建一个.git子目录从此该目录就成为 Git 仓库。之后就可以进行版本控制操作了。3. Git 常用指令速查下面这些指令我问的是 AI 因为现在这些指令 AI 命中率很高正确率所以这部分你直接拿 AI 跑就行你大概看一下知道有哪些指令大概作用就可以了。3.1 仓库初始化与克隆命令说明git init在当前目录初始化一个新的 Git 仓库git clone 仓库地址克隆远程仓库到本地例如git clone https://github.com/user/repo.git3.2 查看状态与差异命令说明git status查看工作区和暂存区的当前状态哪些文件被修改、哪些未追踪等git diff查看工作区与暂存区之间的差异未暂存的修改git diff --staged查看暂存区与最新提交HEAD之间的差异已暂存的修改git log查看提交历史按时间倒序git log --oneline --graph以简洁图形方式查看分支历史非常实用git show commit-id查看某次提交的详细变更内容3.3 添加与提交核心三板斧命令说明git add 文件将指定文件添加到暂存区准备提交git add .添加当前目录下所有变更新增、修改、删除到暂存区git add -u仅添加已追踪文件的变更不包括新文件git commit -m 提交信息将暂存区内容提交到版本库并附上说明git commit -am 信息跳过git add直接提交所有已追踪文件的变更相当于git add -ucommit3.4 远程仓库操作命令说明git remote add origin url添加远程仓库通常命名为origingit remote -v查看当前配置的远程仓库地址git push origin 分支名将本地分支推送到远程仓库如git push origin maingit push -u origin 分支名首次推送并建立本地分支与远程分支的关联之后可直接git pushgit pull origin 分支名从远程仓库拉取最新代码并合并到当前分支相当于fetchmergegit fetch origin仅下载远程更新但不合并手动查看后再决定是否合并3.5 分支管理命令说明git branch列出所有本地分支当前分支前有*标记git branch 分支名创建一个新分支但不会切换git checkout 分支名切换到指定分支git switch 分支名Git 2.23 推荐的新命令用于切换分支git checkout -b 分支名创建并切换到新分支常用git switch -c 分支名同上新版推荐写法git merge 分支名将指定分支合并到当前分支git branch -d 分支名删除本地分支已合并的git branch -D 分支名强制删除本地分支即使未合并git push origin --delete 分支名删除远程分支3.6 撤销与回退命令说明git restore 文件撤销工作区对文件的修改恢复到暂存区或 HEAD 的状态git restore --staged 文件将文件从暂存区撤出但保留工作区修改git reset --soft HEAD~1撤销上一次提交但保留工作区和暂存区修改可重新提交git reset --mixed HEAD~1撤销上一次提交保留工作区修改但清空暂存区默认行为git reset --hard HEAD~1彻底撤销上一次提交同时丢弃工作区和暂存区所有修改危险丢失数据git revert commit-id创建一个新的提交用来撤销某次历史提交安全不影响历史3.7 标签管理常用版本发布命令说明git tag列出所有标签git tag 标签名创建轻量标签例如git tag v1.0git tag -a 标签名 -m 说明创建带注释的标签git push origin 标签名推送特定标签到远程git push origin --tags推送所有本地标签到远程git tag -d 标签名删除本地标签git push origin --delete 标签名删除远程标签3.8 其他实用命令命令说明git stash暂时保存工作区修改未提交让工作区恢复干净git stash pop恢复最近一次 stash 的修改并删除该 stashgit stash list查看所有 stashgit cherry-pick commit-id将某次提交“捡”到当前分支用于选择性合并git reflog查看本地所有操作记录包括被 reset 掉的提交用于恢复误操作git config --global user.name 你的名字设置全局用户名git config --global user.email 你的邮箱设置全局用户邮箱第一次使用 Git 时必须配置4、实际项目注意在实际项目开发中尤其是团队协作绝对不能直接在main或master主分支上开发或推送代码。正确的做法是先克隆clone远程仓库到本地然后基于主分支创建新的功能分支feature branch在分支上完成开发、测试最后通过合并请求Pull Request / Merge Request将代码合并回主分支。4.1 、为什么不建议直接 Push 到主分支你可能会想“我就改了一行代码直接推送上去不就行了吗”但在实际生产项目中直接往主分支推送会带来巨大风险绕过代码评审Code Review主分支通常受保护直接推送会跳过团队评审流程其实实际项目里面你可能没有这个权限但是不排除你公司领导没有做这部分的防护没做防护你直接 push 上去这样你就要被骂一顿容易引入低质量代码或逻辑漏洞。破坏构建稳定性如果推送的代码有问题比如忘记安装依赖、语法错误会导致整个项目的持续集成CI失败阻塞其他所有成员的开发进度。冲突难以处理多人同时往主分支推送时后推送的人大概率会遇到冲突。若对冲突处理不当可能导致他人的代码被覆盖或丢失。无法回滚与追溯直接在主分支上提交会让提交历史变得杂乱无章。一旦出问题很难快速定位并回滚到上一个稳定版本。记住主分支main/master必须是“随时可部署”的稳定状态它是项目的生命线不是个人的草稿本。记住主分支main/master必须是“随时可部署”的稳定状态它是项目的生命线不是个人的草稿本。