跳到主要内容Git 入门实战:从零理解版本控制与团队协作 | 极客日志编程语言
Git 入门实战:从零理解版本控制与团队协作
Git 是用于多人协作和文件版本管理的工具。它能记录每一次修改,支持随时回退,解决多人编辑冲突问题。核心概念包括本地仓库、远程仓库、工作区、暂存区和提交历史。常用命令涵盖初始化、添加、提交、推送、拉取及分支管理。掌握 Git 能让开发流程更有序,避免文件混乱和历史丢失。
灵魂伴侣4 浏览 Git 入门实战:从零理解版本控制与团队协作
Git 是一种用于多人文件版本合作的工具。对于非程序员或刚入行的新手来说,理解起来可能有些门槛。这篇文章不打算枯燥地罗列命令,而是用最通俗的方式,带你从零基础理解它,并掌握它的核心用法。
Git 的核心作用
1. 版本控制:文件的时光机
文件永远不会只有一个版本。你是否经历过这样的场景?
- 论文会有'终稿 v1、终稿 v2、终稿最终版';
- 设计稿会有'改版 A、改版 B、改版 C';
- 甚至自己写的文章也会来回改十几遍。
如果突然觉得某个节点偏离了方向,或者发生了错误,而你已经进行了多处修改,单独再修改不仅费事,还容易遗漏。
你可能会尝试这样保存文件:
论文_最终 v1.docx
论文_最终_改过的 v2.docx
论文_最终 2_真的最终.docx
论文_最终最终版_别改了.docx
这种方法不仅每次要单独保存(还容易忘),最后你也分不清哪个是最新版,哪个删了重点内容。对于大型项目来说,这简直是灾难。
聪明的你可能想到了游戏里的存档点。保存一下是一个点,明天再改它又是一个点。你死了(改错了),读档就行。
Git 做的事情非常简单:
帮你保存每一次修改,并能随时回到任何一次修改。
没有玄学,就是这么接地气。我们可以将 Git 理解为文件的时间机器。
你可以把 Git 想象成一个'文件历史的照相机':
| 你每改一次资料 | Git 就悄悄拍一张照片 | 你还可以在照片背面写上备注 |
|---|
| 第一天写了初稿 | 📷 咔!留了一版 | 这是我的初稿哦 |
| 第二天删了两段 | 📷 又拍一张 | 第三四段不太通顺,我删掉啦 |
| 第三天修改标题 | 📷 再拍一张 | 修改了标题 |
| 第四天添加了新内容 | 📷 再拍一张 | 增加了'女主爆甩男主的情节' |
| 第五天写完稿子 | 📷 最后拍一张 | 完稿! |
如果第四天你突然后悔:'我觉得还是第一天写得好!'没关系——Git 把每一张'版本照片'都替你保存着,你可以直接穿越回第一天。
只要记住:
改文件 → Git 记一次
改错了 → Git 带你回去
文件乱了 → Git 给你旧版本
一切可撤回、可穿越、可找回
在这里总结一下,Git 就是文件的照相机和备忘录,它记录着你文件的每一个版本,学了 Git,你的文件不会再变成一团乱麻。
2. 团队合作:告别文件地狱
如果你一个人写文档,Git 能当备份器、时光机、后悔药。但真正好玩的地方是——多人一起正确使用它,像开了外挂。
想象一个场景:三个人一起写同一个方案文档,如果不用 Git 会怎样?假设三个人一起在 V2 文档上作业:
- 小王发你 V3,你改完发给小李 V4,小李说 V3 不行他又写了一个 V3。三份文件互相不一样,谁是最新版?没人知道。
情况一:
情况二: 大家讨论后决定用 V4,但其他人没收到通知,还在基于旧版本工作,后续整理非常麻烦。情况三: 时间紧迫,三人同时在 V2 上作业,需要合并为 V3。发现你和小王修改了同一个文件,冲突文件要手动合并。你可以把 Git 想象成一本大型练习册,每个人都可以同时写自己的那一页,不会互相抢笔。
- 小王写第一章
- 你改目录
- 小李润色结尾
- 经理审稿只看版本差异
- Git 自动把大家写的部分合起来
就像几个人一起拼拼图,不用挤一个位置。没有喊话、没有抢文件、没有版本混乱。
💡 你写你的,我写我的,最后 Git 帮大家拼好。
就算冲突了,Git 也能帮你处理。有时候不可能完全不重叠——你改了第三段,小李也改了第三段,那怎么办?Git 不会让你们打架,它会标出分歧,让你决定选哪个。它不是替你做裁判,而是把分歧摆在你面前让你决定。
| 优点 | 小白理解版解释 |
|---|
| ① 不会互相覆盖 | 因为 git 可以帮你自己找出冲突,不会出现'我改了你又给我删了'的问题 |
| ② 每个人可以同时独立工作 | 不抢文件,不等别人改完才轮到你 |
| ③ 所有修改有迹可循 | 谁写了啥一清二楚,避免甩锅 |
你做你的,我做我的;最后 Git 把结果合成一个版本,历史都存着。
3. 团队协作案例示例
| 角色 | 负责内容 |
|---|
| 小策(策划) | 关卡设计、玩法文档 |
| 小美(美术) | 坦克素材、地图贴图 |
| 小程(程序) | 代码、功能实现 |
- 小程创建项目仓库(Git 仓库 = 游戏资料大箱子)。里面有资料夹,例如:
/code (代码), /assets (美术资源), /docs (策划文档)。
- 每个人在各自的文件夹开发,不会互相干扰。
- 小策:写玩法文档 → 在
docs 文件夹
- 小美:画坦克素材 → 在
art 文件夹
- 小程:写炮弹发射代码 → 在
code 文件夹
当他们开发好一部分功能时,分别提交。这种情况下似乎他们不会冲突、不会覆盖别人成果、每个人的贡献清清楚楚。接下来是更复杂的情况:
| 角色 | 人数 | 工作内容 |
|---|
| 美术 | 2 人(小红 & 小蓝) | 坦克、地图、爆炸特效 |
| 策划 | 1 人(小白) | 玩法规则、关卡文档 |
| 程序 | 3 人(小程、小明、小涛) | 坦克移动、AI、子弹系 |
| 内容分工(各自独立) | Git 分支分法(各干一条线) |
|---|
| 小红 → 画坦克皮肤 | branch: branch-art |
| 小蓝 → 做爆炸/地图素材 | branch: branch-art |
| 小白 → 调规则+关卡文档 | branch: branch-doc |
| 小程 → 坦克系统、子弹系统等功能 | branch: branch-code |
| 小明 → AI 系统等功能 | branch: branch-code |
| 小涛 → UI 客户端功能 | branch: branch-code |
这种情况简单的拉取分支和提交分支似乎不太够,为了更有效的管理他们的合作文件,可以通过更新代码分支、拉取代码分支、添加代码分支、合并代码分支、切换代码分支等远程和本地的操作来完成自己的操作。
Git 仓库详解
1. 本地仓库
什么是本地仓库?
当你从远程仓库克隆项目到电脑,或自己在本地 git init 创建一个项目时,就会生成一个 本地仓库。它就像一个:
- 记录你所有修改历史的私人工作区
- 不联网也能使用的开发空间
- 试验、备份、版本管理的多功能实验室
本地仓库 = 你自己桌面上的草稿本,
你可以改、可以写乱、可以翻以前的内容,谁也不会受影响。
等你满意后再把结果拿去'共享'——那就是 push 到远程。
本地仓库实际上包含三个区域
| Git 区域 | 理解 | 意义 |
|---|
| 工作区 Working Directory | 你的草稿纸 | 文件实际编辑的地方 |
| 暂存区 Staging Area | 草稿准备区、待提交篮子 | 想提交哪些改动先放进去 |
| 本地仓库 Local Repository | 历史记录册 | commit 后的永久版本存档 |
本地仓库能做的事
- 随时 commit,保存每一次改动历史
这个保存的操作就是 commit 操作。你不需要等到完美再提交,只要改动完成一小步就能保存:新增功能、调整 UI、修 bug。每一次都是一张'时光快照',想回滚随时回。
- 可以无限分支,做实验安全无风险
分支是本地仓库最大自由度。这里多出来的分支,你可以看作从 copy 一份项目文件出来用于你的项目实验。
main(稳定版)
├─ try-ai-test ← 测 AI 敌人看是否好玩
├─ ui-redesign ← 改坦克 UI 但怕翻车?
└─ crazy-physics ← 胡搞弹道轨迹也不怕
无论试验多疯,不会影响主项目,不会影响队友,随时可合并 or 放弃。
- 本地仓库可以脱离网络使用(离线依然强大)
坐高铁、去咖啡馆断网、飞机上开发,你依然可以查看版本历史、建分支、写代码、commit 多次保存快照。
- 推送前可以自查,不会破坏主项目
直接在云端写代码风险很大。但 Git 不允许直接改远程,而是要求先在本地完成修改。你在本地打磨 → 测试通过 → push。这样保证提交到远程的永远是靠谱版本。
2. 远程仓库
什么是远程仓库?
远程仓库就是把你的代码/文件存在网上,而不是只放在你电脑里。它可以存储你每次提交的信息,并且队友也能通过远程仓库即时的看见你提交的信息。
一般靠谱的队友会把自己本地仓库深思熟虑的工作成果上传到远程仓库!这样做最重要的作用是:
- 换电脑也能随时拿到项目文件
- 队友能随时一起修改项目文件
- 本地电脑坏了文件也不会受到任何损失
远程仓库能做的事
- 本地代码推送到远程仓库(push)
你在本地写代码 → commit 保存 → 想共享给队友。这时你会执行 push:把你电脑里的成果上传到远程仓库,让别人也能看到。
- 从远程拉取最新代码到本地(pull)
当别人推送了更新,而你本地还是旧版本,你需要 pull:把他人更新下载并合并到本地,让你保持最新进度。
- 支持权限管理,决定谁能访问/修改
你可以设置公开还是私有?谁能看?谁能 push?谁只能 read-only?
为什么要有远程仓库?
- 做多人协作的「中心版本库」
有了远程仓库之后,约定以远程仓库为'唯一权威版本'。大家从远程拉最新 → 在本地改 → 改完再推回远程。远程仓库是这个项目的'大家都认的源头版本'。
- 做项目的「安全备份」
只放在本地会怎样?电脑坏了、硬盘挂了、被偷了 → 项目没了。而远程仓库在云端服务器上,异地备份。你本地炸了,只要远程在,一切还在。
- 做多设备之间的「同步枢纽」
在公司写到一半 → push,回家 pull 一下 → 立刻接着写。远程仓库就是你的'云端中转站'。
- 做「权限控制」和「审计记录」
这些平台会提供谁能访问这个仓库,谁能写,谁只能看,谁在什么时候提交了什么东西。远程仓库 = 上锁的共享文件柜 + 自动记账本。
- 驱动自动化:测试 / 部署 / 检查
很多团队会约定:'只要有人 push 到远程仓库,就自动触发一件事。'比如自动跑一遍测试,自动构建、自动部署。远程仓库经常是整个自动化流水线的触发点。
常见的 Git 远程仓库平台有哪些?
| 平台 | 类别 | 小白理解 |
|---|
| GitHub | 全球最大开源平台 | 有点像'代码界的淘宝城',啥都有 |
| Gitee(码云) | 国内平台,速度快 | 类似国产 GitHub,访问更顺畅 |
| GitLab | 企业常用,可私有部署 | 就像公司自建仓库,只员工能进 |
| Bitbucket | 程序团队多人协作多 | 小团队免费私库多,适合开发协作 |
Git 操作详解
现在大家理解了 Git 的主要作用,本地仓库,远程仓库,下面通过一个简单的项目实例来讲解一下 Git 的详细操作步骤。
1. Git 基础操作
① git init 操作
程序员小程在自己的文件夹里创建了一个项目文件,并且项目文件是这样的:/code, /assets, /docs。这里仅仅是一个文件,还不是本地仓库。但是他打开终端 / Git Bash,选一个这个项目的文件夹,并输入:
② git add 操作和 git commit
| 区域 | Git 名字 | 小白理解 |
|---|
| 工作区 | Working Directory | 你实际在改的文件夹 |
| 暂存区 | Staging Area | '待提交篮子',先挑准备好的改动放进去 |
| 本地仓库 | Local Repository | 历史相册,真正永久记录改动的地方 |
git add // 把改动从'工作区'放进'暂存区',为下一次 commit 做准备
git commit // 把暂存区的内容打包,存进'本地仓库'变成一个历史版本
一张简化流程就是:你改文件 → git add → git commit。
git add main.py
git add assets/
git add .
git commit -m "实现坦克移动和开火功能"
git commit -m "更新美术资源:红色坦克皮肤"
git commit -m "补充文档:第一关敌人刷怪规则"
- 当前暂存区所有文件的版本
- 提交人信息(谁)
- 提交时间(什么时候)
- 提交说明(做了什么)
以后你可以回到这个 commit:看那时候项目长什么样、对比当时和现在的差别出了问题、可以回滚/对比排查。
暂存区的作用:可以先把'确定的部分'放进暂存区,不确定的先留着。
/code/move.py 已经改完了,确定没问题 ✅
/code/ai.py 还在乱试,根本写不完 ❌
git add code/move.py
git commit -m "完成坦克移动重构"
add = 我对这些改动'有信心了,准备提交'。工作区未 add 的内容 = '还在玩,还没想好,先别进历史'。
git add .
git commit -m "完成 art, code, doc 初始文件构造"
小程通过上述两部操作,完成了一次自己项目对本地仓库的提交,我们就可以通过历史记录来查看这次操作了。
③ git log 操作
git log 用来查看提交历史(commit 记录)
它就像时间轴,你能看到项目从过去到现在经历了什么改动。
commit 45bb3c4f4d...
Author: 小程 <cheng@tank.com>
Date: 2024-01-22 16:41
"完成 art, code, doc 初始文件构造"
④ git remote add origin 操作
小程本地创建了一个 Git 仓库,并且完成了第一次提交后,他想要把这个本地仓库与远程仓库(比如 GitHub、GitLab 或 Gitee)关联起来。其通过执行 git remote add origin 命令,就可以将本地仓库与远程仓库绑定,使得后续能够方便地推送(push)和拉取(pull)代码。
git remote add origin <远程仓库地址>
git remote 是 Git 用来管理远程仓库的命令。
add 是用来添加一个新的远程仓库。
origin 是远程仓库的名称,通常使用 origin 作为默认名称。
<远程仓库地址> 是你在 GitHub、GitLab 或 Gitee 等平台创建的仓库地址,通常是一个 URL。
git remote add origin https://github.com/your-team/tank-battle-game.git
通过这个命令,本地仓库与远程仓库就建立了关联。此后,所有的 git push 和 git pull 操作都会默认对这个远程仓库进行。
⑤ git push 操作
连接远程仓库后,小程想将本地仓库的内容(提交)上传到远程仓库,这时候就要用到 git push。
git push 是将本地仓库的更改(提交)上传到远程仓库的命令。通常在完成本地开发后,想要与团队共享代码,或者备份代码到远程仓库时,会使用 git push。
git push <远程仓库名> <本地分支名>:<远程分支名>
如果是第一次推送,并且本地和远程仓库的分支还没有关联,可以用:
其中 -u 表示设置 upstream 关联,也就是说以后就可以直接用 git push 不需要再指定远程仓库和分支。
到此为止:小程建立好了本地仓库,并把仓库文件上传到远程仓库,其他队友,就可以通过远程仓库来拉取或者克隆项目了。
你电脑里先有项目文件
↓ git init(让文件夹变成 Git 仓库)
↓ git add + git commit
↓ 再去平台创建远程仓库
↓ git remote add origin <远程仓库地址>
↓ git push 上传到远程
⑥ git clone 操作
📍 仓库项目初始文件已建在 GitHub / GitLab / Gitee。
每个人打开终端 / Git Bash,选一个放项目的文件夹:
tank-battle-game/
├── README.md
├── (之后会有)code/
├── (之后会有)assets/
└── (之后会有)docs/
这个文件夹,就是各自的本地仓库,接下来所有改动都在这里发生。这一步叫:clone(克隆)。
clone 可以看作:把远程仓库完整'拷贝一份'到自己电脑上,变成本地仓库。但这和'下载 ZIP 压缩包'相比,有两个本质区别:
- zip 只是一堆文件,没 Git 历史、不能 commit、不能 push
- clone 下来的,是一个带完整 Git 历史、可以继续版本管理的仓库
2. Git 分支操作
① git pull 操作
项目成员通过 git clone 操作在本地得到了大家共同的项目,如果后续有成员通过 git push 更新了这个项目,那我们还需要进行 git clone 来更新项目吗?不用,我们直接通过 git pull 命令来执行就可以了。
git pull = 从远程仓库拉取最新更新,并自动合并到你的本地仓库。
git fetch(从远程把更新'拉下来') + git merge(把更新合并进你的当前分支)
远程仓库(远程最新版本)
↓ fetch
本地仓库(拿到更新但还没合并)
↓ merge
你的当前分支(更新后的最终版本)
你只执行一条 pull,它内部自动帮你完成这两步。
git add assets/tank.png
git commit -m "新增蓝色坦克皮肤"
git push
下面我来详细讲一下 git fetch 和 git merge。
② git fetch 操作
git fetch:从远程仓库把最新的提交记录拉到本地,但不改动你当前的代码文件**。
- 它会更新
origin/main、origin/dev 等远程分支的指针
- 但它不会去改你现在正在用的分支(比如本地
main)
小白可以这么想: 把远程仓库想成'总店账本',本地仓库是你手里的'分店账本'。
git fetch 就像:去总店复印了一份最新账本带回店里,但你还没用它去改自己本地的账本。
你只是知道了'总店现在是什么样',但你自己的账本还停留在原来的状态。
git fetch
git fetch origin
- 从远程仓库把最新提交记录下载下来
- 更新本地的'远程跟踪分支'
- 比如:
origin/main、origin/dev、origin/feature-xxx
- 不改变:
- 你的当前分支(如本地
main 的内容保持不变)
- 你的工作区文件(不会突然多/少东西)
'先把远程的最新情况同步到本地的数据库里,但先不动我的工作区。'
git log --oneline --graph --all
- 本地
main 在某个位置
origin/main 可能已经往前走了几步(多了几次提交)
③ git merge 操作
当你确认远程的更新没有问题,想要将其应用到你的本地分支时,就需要执行 merge 操作。
git merge:将远程分支的更新合并到当前分支。
此时,Git 会将远程的最新提交合并到你当前的本地分支中。如果有冲突,Git 会提示你解决冲突,选择保留哪一部分代码。
至此,我们了解了 Git 的基本工作流程:初始化仓库、添加文件、提交记录、关联远程、推送更新、拉取同步以及分支管理。掌握这些操作,你就能从容应对大多数开发场景中的版本控制需求了。
相关免费在线工具
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
- HTML转Markdown
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
- JSON 压缩
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
- JSON美化和格式化
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online