Git仓库基础用法 📅 2026/7/13 1:57:32 一、引言开篇场景“凌晨两点你删掉了一行关键代码保存退出——然后发现程序崩了。更糟的是你忘了之前写了什么。如果你在用 Git只需要一行命令就能回到一小时前的状态。”几乎所有开发者都遇到过代码误改、丢失、版本混乱的问题而 Git 就是解决这类问题的行业标准工具。它不只是简单的代码备份工具更是一套完整的版本控制、代码回溯、团队协作体系是程序员日常开发的必备技能。读完本文你能独立完成从项目创建到日常提交、远程协作、分支开发的全流程遇到常见误操作、冲突、推送报错等问题知道如何快速应对彻底摆脱“瞎敲命令”的状态阅读建议打开电脑终端跟着每一步亲手操作边看边练实操是掌握 Git 最快的方式看完即可熟练落地日常开发场景全文示例项目为了统一实操场景降低学习门槛本文所有操作将围绕一个名为blog-demo的个人博客项目展开全程连贯实操无零散案例创建index.html首页基础文件添加style.css样式文件完善页面样式使用独立分支开发“文章列表”新功能将本地完整项目推送到 GitHub 远程仓库二、快速上手安装与配置本章目标10分钟内完成Git安装和首次全局配置搭建可正常使用的Git开发环境2.1 安装 GitGit 支持全平台系统不同系统可通过对应官方方式快速安装安装完成后无需复杂配置终端识别即可使用Windows前往 Git 官网下载对应系统版本的安装包默认下一步安装即可也可通过系统自带 Winget 命令一键安装无需手动下载macOS安装 Homebrew 工具后执行一键安装命令全程自动完成配置Linux通过系统自带包管理器apt、yum 等直接安装适配绝大多数发行版安装验证打开终端输入以下命令输出版本号即代表安装成功git --version2.2 初次配置一次性Git 安装完成后必须进行全局用户名和邮箱配置这是 Git 的核心基础配置所有代码提交记录都会绑定该作者信息用于区分代码开发者溯源修改记录。仅需配置一次永久生效。git config --global user.name 你的名字 git config --global user.email 你的邮箱除核心配置外可按需配置个性化参数提升使用体验配置终端颜色高亮让 Git 操作输出结果颜色区分状态一目了然配置默认编辑器自定义 commit 编辑、冲突修改的默认文本编辑器2.3 配置 SSH推荐日常连接 GitHub 远程仓库有 HTTPS 和 SSH 两种方式强烈推荐配置 SSH核心优势为永久免密推送代码无需每次输入账号密码大幅提升开发效率且传输稳定性更强。SSH 配置核心步骤执行密钥生成命令生成专属公私钥将公钥添加到 GitHub 个人后台的 SSH 配置中即可ssh-keygen -t ed25519 -C 你的邮箱执行命令后全程回车默认配置即可无需额外修改参数。 如果你临时使用 HTTPS 方式克隆仓库无需配置 SSH可直接跳过本节内容。三、第一次提交从初始化到完成提交本章目标完成你的第一次 Git 提交彻底理解工作区、暂存区、版本库三大核心区域掌握基础提交流程3.1 创建项目并初始化我们从零创建本次实操的博客项目并将普通文件夹初始化为 Git 仓库让 Git 开始接管项目版本。mkdir blog-demo cd blog-demo git init执行git init后文件夹内会生成一个隐藏的.git文件夹这是 Git 的核心“数据库”专门存放项目所有版本记录、提交日志、分支配置等核心数据禁止手动修改、删除该文件夹内容否则会导致版本库损坏、代码记录丢失。初始化验证执行ls -la查看文件夹所有文件包含隐藏文件看到.git目录即初始化成功。3.2 创建第一个文件并查看状态在项目根目录新建index.html文件写入基础的网页 HTML 结构作为项目首页文件。文件创建完成后执行状态查看命令观察 Git 对新文件的识别状态git status此时终端会显示Untracked files代表该文件是新增文件Git 尚未开启追踪不会记录其版本变化。概念引入①工作区——就是你电脑上直观看到的项目文件夹所有的代码编写、文件修改、删除操作都在工作区完成是代码的原始编辑区域。3.3 追踪文件添加到暂存区想要让 Git 记录文件改动需要先将工作区的变更添加到暂存区完成文件追踪。# 追踪单个指定文件 git add 文件名 # 查看当前仓库状态 git status执行后文件会变为绿色状态显示为 Staged代表已成功进入暂存区。日常开发最常用快捷命令git add .可一次性添加当前目录下所有新增、修改的文件变更无需逐个添加高效便捷。概念引入②暂存区——可以理解为“购物车”专门存放你确认需要提交的代码改动。你可以批量将多个修改加入暂存区统一提交灵活筛选需要保存的版本内容。3.4 完成提交保存到版本库暂存区的改动仅为临时存放需要执行提交命令将改动永久保存到版本库生成专属版本记录。git commit -m 备注信息提交完成后可通过简洁命令查看所有提交记录git log --oneline概念引入③版本库——Git 永久存储所有提交记录的核心区域相当于游戏的“存档点”每一次 commit 都是一个独立存档后续可随时回溯、切换、修改对应版本。规范提交信息统一采用type: 简短描述格式清晰标注本次提交的改动类型和内容方便团队协作和版本回溯。常用 type 类型feat新增功能fix修复代码 bugdocs文档修改、注释更新style样式调整、格式优化无代码逻辑改动refactor代码重构优化逻辑无功能新增/修复3.5 配置 .gitignore项目开发中会产生大量无需提交的文件依赖包、环境配置文件、系统临时文件、打包产物等。如果不做忽略配置这些文件会被 Git 追踪造成仓库臃肿、敏感信息泄露因此项目初始化后第一件事就是配置 .gitignore。在项目根目录新建.gitignore文件写入忽略规则Git 会自动忽略匹配规则的文件不再追踪和提交。本文适配 Python 开发场景下方为Python 项目通用完整忽略规则覆盖虚拟环境、缓存、编译产物、编辑器配置等所有常见冗余文件可直接复用。# Python 字节缓存文件 __pycache__/ *.py[cod] *$py.class # 虚拟环境目录 venv/ env/ .venv/ .env/ virtualenv/ # 打包、编译产物 build/ dist/ *.egg-info/ .Python # 日志、临时文件 *.log *.tmp *.swp # 环境变量、配置缓存 .env .env.local .idea/ .vscode/ # 系统文件 .DS_Store配置完成后执行git status被忽略的文件不会出现在待提交列表中配置生效。.gitignore必须放在项目根目录和.git文件夹同级才生效只对未被 Git 追踪过的文件生效如果文件已经add/commit过改.gitignore不会自动忽略需要先删除仓库追踪3.5.1 进阶让 .gitignore 对已追踪文件彻底生效完整命令核心原理仅删除 Git 仓库的追踪记录不会删除本地文件本地缓存、虚拟环境等文件会保留同时不再被Git提交、追踪。步骤1移除仓库中所有已追踪、但被 gitignore 匹配的文件核心命令# 清空Git缓存重新匹配最新.gitignore规则最通用、推荐 git rm -r --cached .参数解释-r递归处理文件夹适配venv、__pycache__等目录--cached只删除仓库追踪记录保留本地文件绝对不会误删代码。步骤2重新暂存、提交生效# 重新添加所有未被忽略的合法文件 git add . # 提交配置更新彻底固化忽略规则 git commit -m chore: 生效gitignore忽略Python冗余文件精准移除单个文件/文件夹按需使用如果不想全局刷新仅移除指定已追踪文件执行以下命令# 移除单个已追踪文件 git rm --cached 文件名 # 移除已追踪的文件夹如venv虚拟环境 git rm -r --cached venv/操作完成后再次执行git status所有 .gitignore 配置的冗余文件、缓存、虚拟环境目录均不会出现在待提交列表中规则完全永久生效。3.6 小练习完成三次提交通过三次实操提交熟练掌握 add commit 完整流程夯实基础操作新建style.css样式文件写入基础样式提交代码git commit -m style: 添加基础样式修改index.html文件引入style.css样式提交代码git commit -m feat: 引入样式文件执行git log --oneline查看提交记录此时项目应有 3 条完整提交记录✅本章检查点执行git log --oneline输出结果应包含三条有序提交记录示例如下a1b2c3d feat: 引入样式文件 e4f5g6h style: 添加基础样式 i7j8k9l feat: 添加首页 HTML 结构四、远程协作把代码推送到 Gitee本章目标将本地仓库与 Gitee 远程仓库关联熟练掌握代码推送、拉取核心操作解决推送失败等常见问题4.1 在 Gitee 创建远程仓库首先在 Gitee 平台创建与本地项目同名的远程仓库用于存储、同步本地代码实现云端备份与团队协作。创建核心步骤登录 Gitee 账号点击右上角新建仓库按钮创建仓库仓库名称填写blog-demo与本地项目保持一致重点不要勾选 README、LICENSE 等初始化选项避免远程仓库存在初始文件与本地代码产生冲突创建完成后复制仓库 SSH 地址优先选择 SSH 协议免密推送4.2 关联远程仓库回到本地项目终端执行命令将本地 Git 仓库与 Gitee 远程仓库绑定关联# 关联远程仓库替换为自己的Gitee仓库SSH地址 git remote add origin gitgitee.com:你的用户名/blog-demo.git # 查看远程关联状态验证是否绑定成功 git remote -v执行后终端展示对应的推送、拉取地址即代表远程关联成功。其中origin是远程仓库的默认别名为行业通用规范无需修改。4.3 第一次推送关联完成后将本地所有提交的代码推送到远程仓库git push -u origin main-u参数核心作用建立本地main分支与远程main分支的永久追踪关系。首次推送必须加 -u后续日常推送直接执行git push即可无需重复指定分支。⚠️部分旧版本 Git 默认主分支为master若本地默认分支为 master可统一使用git push -u origin master保持本地与远程分支名一致即可。4.4 拉取远程更新团队协作场景中同事会向远程仓库推送新代码需要同步远程最新改动到本地此时用到拉取命令核心区分两个高频指令命令是否自动合并代码适用场景git pull✅ 自动合并远程与本地代码日常快速同步代码一键完成更新适合绝大多数常规场景git fetch❌ 仅下载远程更新不合并代码需要先查看、审核同事修改的代码内容确认无误后再手动合并规避未知风险4.5 常见问题推送被拒绝远程有新提交日常协作中高频报错场景本地推送代码失败终端提示! [rejected] main - main (non-fast-forward)报错原因远程仓库存在本地没有的新提交记录Git 为了避免覆盖他人代码直接拒绝推送。常见于多人协作、多设备登录同一仓库开发场景。解决三步走通用万能方案执行git pull拉取远程最新代码同步远程更新到本地若出现代码冲突手动解决冲突具体方法参考 5.6 节再次执行git push即可成功推送本地改动✅本章检查点打开 Gitee远程仓库页面可正常看到本地推送的index.html、style.css文件代码同步成功。五、分支并行开发的利器本章目标理解分支的核心价值熟练掌握分支创建、切换、开发、合并、删除全流程独立解决代码合并冲突问题5.1 为什么需要分支先用场景说话很多新手习惯直接在主分支开发极易引发代码混乱、功能耦合、Bug 无法溯源等问题而分支就是解决这些问题的核心工具场景一正在开发新功能写到一半代码处于半成品状态突然需要紧急修复线上 Bug无需提交半成品代码到主分支可新建 Bug 分支独立修复场景二团队多人协作开发A 开发文章功能、B 开发评论功能通过独立分支隔离开发互不干扰避免代码互相覆盖一句话核心分支让你可以在同一套代码基础上隔离地进行不同方向的开发主分支始终保持稳定、可用状态。5.2 查看与创建分支默认项目仅有main主分支通过以下命令查看分支、创建自定义功能分支# 查看当前所有本地分支* 标记为当前所在分支 git branch # 创建名为 feature/articles 的功能分支用于开发文章列表功能 git branch feature/articles分支命名规范统一采用feature/功能名、fix/Bug名格式语义清晰便于团队识别。5.3 切换分支分支创建后需要切换到对应分支才能开展开发工作Git 提供新旧两套切换命令推荐使用简洁新语法# 旧版切换语法兼容所有Git版本 git checkout feature/articles # 新版切换语法Git 2.23 推荐使用 git switch feature/articles # 一步到位创建并切换到新分支最常用 git switch -c feature/articles 核心实操特点切换分支后项目工作区文件会自动同步为对应分支的版本不同分支的代码完全隔离互不影响。5.4 在分支上开发我们在新建的功能分支中完成文章列表功能开发直观感受分支隔离特性确保当前处于feature/articles分支新建articles.html文章列表页面写入基础代码内容执行git add .暂存所有改动执行git commit -m feat: 添加文章列表页提交版本执行git switch main切回主分支查看项目文件会发现articles.html文件消失该现象充分证明分支开发完全隔离功能分支的改动不会影响主分支代码完美保障主分支稳定性。5.5 合并分支当功能分支开发完成、测试无误后需要将分支代码合并到主分支完成功能上线# 先切回需要合并到的目标分支主分支git switch main # 将功能分支代码合并到当前main分支 git merge feature/articles合并完成后主分支中会出现articles.html文件功能代码成功同步到主分支。合并完成、功能稳定后可删除无用的功能分支精简分支列表git branch -d feature/articles5.6 合并冲突新手最怕的场景一步步来合并冲突是新手学习 Git 的最大卡点但冲突不是程序报错只是 Git 无法自动判断代码取舍需要开发者手动决策掌握规律即可轻松解决。冲突触发核心条件两个不同分支修改了同一个文件的同一行/同一区域代码Git 无法自动合并触发冲突提示。修改场景是否产生冲突两个分支修改不同文件✅ 自动合并无冲突两个分支修改同一文件的不同位置✅ 自动合并无冲突两个分支修改同一文件的同一位置❌ 产生冲突需手动解决手把手模拟并解决真实冲突第一步制造冲突场景# 新建并切换到头部样式修改分支 git switch -c feature/header # 修改index.html标题为测试版提交代码 # 此处手动修改文件后执行提交 git add . git commit -m feat: 修改标题为测试版 # 切回主分支 git switch main # 在主分支修改同一位置标题为正式版提交代码 # 此处手动修改文件后执行提交 git add . git commit -m feat: 修改标题为正式版第二步执行合并触发冲突git merge feature/header终端报错Automatic merge failed; fix conflicts and then commit the result.代表冲突产生合并暂停。第三步手动解决冲突打开冲突文件index.html会看到 Git 自动插入的冲突标记 HEAD 我的博客 - 正式版 我的博客 - 新标题 feature/headerHEAD区域当前所在主分支main的代码内容feature/header区域待合并分支的代码内容手动决策保留内容可保留任意一方、或整合双方内容必须删除所有冲突标记符号文件恢复正常代码格式。第四步完成合并收尾# 暂存解决冲突后的文件 git add . # 提交合并结果完成合并 git commit -m merge: 解决标题冲突一句话总结冲突不是错误是 Git 在请你做决定——最终保留什么代码由开发者根据业务需求说了算。✅本章检查点当前处于main分支执行git branch确认已合并的功能分支已删除项目中articles.html文件正常存在。六、常见问题与后悔药按操作阶段分类本章目标覆盖90%新手高频误操作做到修改可撤回、报错可解决告别Git操作焦虑6.1 场景一修改了但还没 add工作区撤销适用场景代码修改错误、调试代码作废尚未执行任何暂存操作需要丢弃所有本地修改恢复到上次提交的完整状态。# 撤销单个文件的工作区修改 git restore 文件名⚠️高危提醒该操作会永久丢弃工作区未保存的修改不可恢复执行前建议先通过git diff查看具体修改内容确认无需保留再操作。6.2 场景二已经 add 但还没 commit暂存区撤销适用场景误将不需要提交的文件添加到暂存区需要取消暂存但保留本地文件修改方便二次编辑后重新提交。# 将文件从暂存区移出保留工作区修改 git restore --staged 文件名通俗理解等同于“撤销 git add 操作”仅修改暂存区状态不改动代码内容安全无风险。6.3 场景三已经 commit 但还没 push撤销提交本地已完成提交但尚未推送到远程仓库发现提交内容有误、需要修改可通过git reset撤销提交三种模式适配所有场景一张表彻底弄懂模式命令提交记录暂存区工作区使用场景--softgit reset --soft HEAD~1撤销✅ 保留✅ 保留最常用提交信息写错、漏改内容需要重新整理后提交--mixedgit reset --mixed HEAD~1撤销❌ 清空✅ 保留需要重新手动 add 所有改动规整提交内容--hardgit reset --hard HEAD~1撤销❌ 清空❌ 清空 ⚠️彻底废弃本次提交的所有改动慎用内容不可恢复 参数说明HEAD~1代表“上一次提交”HEAD~3代表“往前撤销三次提交”可按需修改数字。6.4 场景四已经 push 到远程了怎么办代码已推送到远程仓库本地重置命令不再适用需区分分支类型选择解决方案核心原则公共分支禁止强制覆盖历史。方案命令核心原理适用场景方案一推荐git revert 提交ID创建一条全新的提交反向抵消原有错误提交不修改历史记录公共分支main/dev、团队协作分支安全无风险所有人同步生效方案二不推荐git reset --hardgit push --force强行改写远程代码历史覆盖原有提交记录仅限个人私有分支公共分支绝对禁用会导致团队代码历史错乱6.5 其他高频问题速查表常见问题解决方案提交信息写错无需改动代码git commit --amend -m 新的提交信息漏提交文件想补充到上一次提交git add 漏掉的文件git commit --amend --no-edit切换分支时不想提交当前半成品代码git stash暂存代码 → 切换分支 → 回来后git stash pop恢复git pull产生多余合并提交历史杂乱使用git pull --rebase变基同步保持提交历史干净线性查看单个文件的所有历史修改记录git log --oneline -- 文件名七、日常开发完整流程图与核心习惯7.1 一个功能开发的完整流程以下是适配90%互联网团队的标准开发流程从日常同步代码到功能开发、合并推送全程规范无坑7.2 四条核心习惯记住就能不踩坑Git 操作的核心不在于记住所有命令而在于养成规范习惯规避99%的新手问题序号核心习惯核心作用①提交前先 git status核对待提交文件列表避免误提交临时文件、敏感配置保证提交内容精准②推送前先 git pull提前同步远程最新代码从根源避免推送被拒、大规模代码冲突③提交粒度要小一次提交只完成一件事方便版本回溯、代码审查、精准回滚问题功能④公共分支不用 force禁止强制改写公共分支历史避免破坏团队所有人的代码版本记录7.3 下一步学什么掌握本文全部内容即可满足日常开发95%的 Git 需求。如需进阶提升适配复杂团队协作、版本管理场景可学习以下核心方向进阶方向实际用途学习关键词交互式变基合并、整理零散提交记录让项目提交历史更整洁规范git rebase -iGit Hooks提交、推送代码前自动执行代码检查、格式化、校验脚本规范代码质量Git Hooks、husky标签管理标记项目正式版本v1.0.0、v2.0.0适配版本发布、迭代回溯场景git tag子模块管理在主项目中嵌套引入独立 Git 仓库适配多项目依赖、公共组件复用场景git submodule附录常用命令速查表汇总日常开发高频 Git 命令无需死记硬背随时查阅即可操作场景对应命令查看仓库状态git status简洁查看提交历史带分支图谱git log --oneline --graph查看代码具体变更内容git diff添加所有变更到暂存区git add .提交代码并填写说明git commit -m 信息推送代码到远程git push拉取远程代码并自动合并git pull仅拉取远程更新、不合并git fetch查看所有本地分支git branch创建并切换分支git switch -c 分支名切换已有分支git switch 分支名合并指定分支到当前分支git merge 分支名删除已合并的本地分支git branch -d 分支名暂存当前半成品代码git stash恢复暂存的代码git stash pop撤销工作区所有修改git restore 文件将文件从暂存区移除git restore --staged 文件撤销上一次提交保留代码修改git reset --soft HEAD~1安全撤销远程已有提交git revert 提交ID