01 — 版本控制是什么?为什么你需要 Git
01 — 版本控制是什么为什么你需要 Git写在前面这一章要解决什么你大概听过「Git」「GitHub」这些词但不知道它们到底是干嘛的。这一章不讲任何命令细节只帮你搞清楚三件事学完后你应该能用自己的话说出「版本控制」解决了什么问题分清 Git 和 GitHub 的区别很多人搞混在自己电脑上装好 Git配好基本信息跑出第一个空仓库读者设定大一同学没有任何项目经验甚至不确定 Git 是不是一个网站。1. 定位为什么要先搞懂概念1.1 一句话先记住Git 是帮你记住文件每一次改动的工具就像游戏里的自动存档。打游戏的时候如果你走到一个存档点不存档后面挂了就只能从头来。写代码也一样——如果你改了一下午的代码运行崩了没有「存档点」就只能凭记忆手动改回去。Git 就是帮你自动打存档点的工具。1.2 没有 Git 会怎样你可能觉得「我不写代码用不到这个」。但想想这些场景场景没有 Git 时你会怎么做会出现什么问题论文改了 5 版发现第 2 版更好文件名写成论文-最终版-真的最终.docx文件越堆越多找不到想要的那版小组作业三个人各自改了一份微信群里传来传去谁也不知道哪个是最新版改了一下午代码运行崩了盯着屏幕手动回忆改了啥大概率改不回来心态崩想试一个新写法又怕把能跑的版本改坏整个文件夹复制一份叫「备份」磁盘堆满备份改完不知道怎么合回去换了台电脑想继续昨天的活用 U 盘拷来拷去容易覆盖、容易丢Git 把这些问题都变成了一个简单的动作打存档。你想存就存随时翻回任何一个存档点多人也不怕互相覆盖。1.3 和你已经会的事对比你已经会的和 Git 的相似点和 Git 的不同点编辑器的撤销CtrlZ都能「回到之前的状态」撤销只能回退几步Git 能回到任意历史时刻另存为新文件都保留了旧版本另存为会堆一堆文件Git 整齐地存在一个地方网盘的历史版本都有版本记录网盘只能一个人用Git 天生为多人协作设计游戏存档都能读档游戏存档只有一条线Git 可以同时存好几条线分支核心理解Git 存的不是「改了什么」而是「每次改完之后所有文件长什么样」——就像游戏存档存的是「此时此刻的完整画面」。2. 本质Git 到底是什么2.1 先搞清一个常见误解Git 不是网站。很多人以为 Git 就是 GitHub这就像以为「电饭锅」就是「共享厨房」——Git是装在你自己电脑上的工具离线也能用GitHub是一个网站让你把代码放到网上和大家共享你可以只用 Git 完全不碰 GitHub前五章都不需要联网也可以把代码推到 GitHub 方便多人协作。2.2 Git 的核心特点用大白话说Git 有三个最关键的特点特点白话解释对你意味着什么分布式每个人的电脑上都有完整的历史不怕断网不怕服务器挂存快照每次存档保存的是完整的文件状态不用担心只存了差异翻旧版很快分支便宜开一条新分支就像贴一张便利贴想试新写法随时开分支不怕改坏主代码图分布式版本控制——每个人都有完整的历史副本。来源Pro GitCC BY-NC-SA 3.0。2.3 三种版本控制模式了解即可版本控制不是从 Git 才有的它经历了三个阶段模式打个比方最大问题本地版本控制把日记本锁自己抽屉里只能在一台电脑上用集中式版本控制大家都去图书馆借同一本书图书馆关门了服务器挂了谁也干不了活分布式版本控制Git每人手里都有一本完整的书单台机器坏了不怕别人那里还有图本地版本控制——只有自己机器上有历史。图集中式版本控制——所有历史存在中央服务器上。署名说明以上三张图来自 Pro Git 一书CC BY-NC-SA 3.0。详见assets/diagrams/ATTRIBUTION.md。2.4 Git 是怎么来的2005 年Linux 内核的开发团队遇到了一个问题他们之前用的版本控制工具叫 BitKeeper不再免费给他们用了。Linux 内核由全球几千人协作开发急需一个替代品。Linus Torvalds就是创造 Linux 的那个人花了两周时间自己写出了 Git 的第一版。他对 Git 的要求很简单需求为什么要快Linux 内核太大了慢了没人用离线也能用贡献者遍布全球不是人人都在公司内网开分支要便宜几千人在同时开发不同功能开源免费Linux 本身就是开源的这些当初为了 Linux 内核设计的特点今天每一个都帮到了你——在你自己电脑上就能提交代码随时开分支完全不花钱。图版本控制工具的发展时间线。2.5 为什么大家都用 Git你可能会问工具那么多为什么偏偏 Git 最流行三个原因真的好用开分支不要钱、断网也能提交、速度飞快GitHub 带飞2008 年 GitHub 上线让 Git 从「命令行工具」变成「社交平台」大家都在上面你也得在学校和公司都要求招聘启事写「熟悉 Git」课程作业要求用 Git 提交不用反而更麻烦3. Git 能帮你做什么按场景你想做的事用 Git 怎么做详细章节把当前状态存下来git addgit commit第 03 章看看之前存了哪些档git log第 03 章回到之前某个存档点git restore/git reset第 04 章试试新写法不影响主代码git branchgit switch第 05 章把新写法合回主代码git merge第 05 章把代码放到网上和同学共享git push第 06 章拿到同学的代码git pull第 06 章临时藏起没写完的代码git stash第 07 章给某个重要版本打个标签git tag第 07 章现在不用记住这些命令后面每一章都会带着你一步步操作。这里先有个印象就行。4. 动手准备安装和配置4.1 安装 Git系统怎么装Windows去 git-scm.com 下载安装包一路下一步就行macOS打开终端输入git系统会自动提示你安装Linux用包管理器安装比如 Ubuntu 执行sudo apt install git4.2 检查有没有装好打开终端Windows 上叫「Git Bash」输入git--version如果看到类似这样的输出就说明装好了git version 2.43.0你看到的版本号可能不一样没关系只要是 2.x 就行。4.3 配置你的身份必须做Git 每次存档都会记录「是谁存的」所以你得先告诉 Git 你叫什么gitconfig--globaluser.name你的名字gitconfig--globaluser.email你的邮箱gitconfig--globalinit.defaultBranch main白话翻译这三条命令命令白话意思git config --global user.name 你的名字以后我存的档作者写「你的名字」git config --global user.email 你的邮箱我的联系邮箱是「你的邮箱」git config --global init.defaultBranch main新建仓库时默认分支叫 main而不是旧式的 master几点注意名字和邮箱不用真实信息也行练习时可以用假的名字和邮箱但如果以后要往 GitHub 推代码邮箱要和 GitHub 注册邮箱一致这三条命令只需要执行一次以后就不用再输了4.4 检查配置有没有生效gitconfig--global--list如果看到类似下面的输出就对了user.name你的名字 user.email你的邮箱 init.defaultbranchmain4.5 创建你的第一个仓库「仓库」就是 Git 管理的文件夹。我们建一个试试mkdirlearn-git-01cdlearn-git-01gitinit-bmain你会看到Initialized empty Git repository in /path/to/learn-git-01/.git/白话翻译Git 在这个文件夹里建了一个隐藏的.git目录以后这个文件夹里的所有改动Git 都会帮你记录。看看当前状态gitstatus输出On branch main No commits yet nothing to commit (create/copy files and use git add to track)白话翻译「On branch main」—— 你现在在 main 这条分支上「No commits yet」—— 还没有任何存档「nothing to commit」—— 暂时没有需要存的东西5. 几个必须要知道的前提知识5.1 「保存」不等于「提交」这是新手最容易踩的坑你以为的实际上在编辑器里按 CtrlS 就是存档了CtrlS 只是保存到硬盘Git 完全不知道文件改了就自动进 Git 了必须手动git addgit commit才算存档流程是这样的你改了文件按 CtrlS 保存到硬盘 ← 这是编辑器的活你用git add挑出想存档的文件 ← 这是你的选择你用git commit打存档 ← 这才是 Git 的活5.2 Git 和 GitHub 不是一回事GitGitHub装在你电脑上的工具一个网站离线也能用必须联网用来记录文件变化用来存放和共享代码免费、开源基本功能免费高级功能收费打个比方Git 是电饭锅GitHub 是共享厨房。你在家用电饭锅煮饭本地用 Git也可以把饭端到共享厨房给大家尝推到 GitHub。5.3 不要把密码放进仓库Git 的历史是永久的——一旦你把密码提交进去就算后来删了文件历史里还是能看到。所以密码、密钥、token 这些东西永远不要提交用.gitignore文件告诉 Git「这些文件别管我」习惯用环境变量存密码后面会讲6. 命令一览按用途分组不用背先有个印象就行配置相关命令用途git config --global 键 值设置全局配置git config --global --list查看全局配置git config --list --show-origin查看配置从哪来的仓库相关命令用途git init -b main新建仓库git clone 网址从网上下载已有仓库第 06 章查看相关只读不会改任何东西命令用途git status看当前状态最常用的命令git log看历史存档git diff看文件改了什么帮助相关命令用途git help 命令打开详细帮助文档git 命令 -h看简短帮助7. 对照表帮你理清容易混淆的概念Git vs GitHub维度GitGitHub是什么命令行工具网站装在哪你自己电脑上互联网上离线能用吗能不能必须注册吗不用要注册账号提交代码git commit本地通过git push推上去提交 vs 保存 vs 备份动作记录了「为什么改」吗能回到过去吗多人能协作吗编辑器保存CtrlS不能不能不能复制文件夹备份不能勉强能不能Git 提交commit能你要写提交说明能能8. 安全习惯硬规矩8.1 一定要做的规矩为什么第一次提交前先配置好名字和邮箱不然提交记录里没有作者信息练习时用单独的文件夹不怕搞坏删了重来就行每次操作后跑git status养成好习惯随时知道当前状态默认分支名用main和 GitHub 等平台保持一致8.2 绝对不要做的禁忌后果正确做法在真实项目上练破坏性命令可能把代码搞丢用learn-git-xxx专门练习把密码提交进仓库密码永久留在历史里用.gitignore排除以为在编辑器里保存就是提交了改动根本没进 Git必须addcommit和同学共用一个 Git 账号提交记录分不清谁是谁各用各的账号9. 真实场景场景一新学期开始写作业开学了老师让你用 Git 交作业。你需要安装 Git配置名字和邮箱建一个文件夹git init变成仓库写完作业后git addgit commit打存档如果需要推到 GitHubgit push推上去场景二小组合作做项目三个人一起做期末项目每人从 GitHub 上git clone下载代码各自在自己电脑上改代码改完后git push推到网上其他人git pull拉取最新代码如果两个人同时改了同一个文件Git 会提示冲突第 05 章讲怎么解决场景三自己写代码怕改坏你写了一个能跑的程序但想试试新功能开一条新分支git branch try-new-feature切到新分支上改代码git switch try-new-feature改坏了切回主分支就行主代码完好无损改好了把新分支合并回主分支10. 进阶补充首读可跳过10.1 「分布式」不等于「没规矩」分布式不是说大家随便乱推代码。团队里仍然有规矩主分支受保护、改动要经过审查Pull Request、不能随意覆盖别人的提交。Git 给你自由团队给你纪律。10.2 配置文件存在哪作用域位置谁优先全局--global用户主目录下的配置文件中等本地--local仓库里的.git/config最高覆盖全局系统--system安装目录最低用git config --list --show-origin可以看每个配置值来自哪个文件。10.3 Git 存储的直觉Git 不是存「改了什么」而是存「改完之后所有文件长什么样」。没改的文件不会重复存Git 会自动复用。这个设计让 Git 又快又省空间。第 10 章会用命令亲自验证这一点。10.4 图形界面工具VS Code、GitKraken 这些图形界面工具可以帮你更直观地操作 Git。但建议你先学命令行因为出了问题网上搜到的答案都是命令行和同事交流时命令行是通用语言图形界面会变命令行不会11. 小实验在可丢弃目录里做实验 A环境就绪打开终端运行git --version把版本号记下来设置全局配置名字、邮箱、默认分支名运行git config --global --list确认三项都设置好了建一个临时文件夹git init -b main再运行git status通过标准git status显示On branch main并且不报任何身份缺失的错误。实验 B用自己的话解释用 3-5 句话回答以下问题不要照抄教程原文Git 和「另存为新文件」比好在哪里Git 和 GitHub 是什么关系为什么 Git 需要你设置邮箱实验 C配置覆盖练习在刚才的练习仓库里设置一个本地邮箱和全局不同的gitconfig--localuser.emailtestlocal.com运行git config --list --show-origin同时找到全局邮箱和本地邮箱完成后取消本地覆盖gitconfig--unsetuser.email通过标准理解「本地配置覆盖全局配置」这个优先级关系。12. 常见问题问学 Git 必须注册 GitHub 吗不用。前五章的内容全部在本机完成完全不需要联网和注册账号。问Git 只给程序员用吗不完全是。任何需要追踪文件改动的场景都能用 Git比如写论文、写博客。不过它对文本文件最友好照片、视频等大文件不太适合直接用 Git 管理。问命令行和图形界面先学哪个先学命令行。原因有二一是出问题搜答案都是命令行二是理解命令行之后再上手图形界面会很快反过来却不行。问不小心把密码提交进去了怎么办如果还没有推送到远程仓库用第 04 章的方法可以撤回。如果已经推送了需要修改密码并从历史中清除比较麻烦。所以最好一开始就养成好习惯不提交密码。问为什么默认分支叫 main 而不是 master这是社区的约定变化。master这个名字历史上让人联想到主奴关系所以社区约定改用main。功能上没有任何区别。问云端删除了项目我本地还有吗有的。你本地的仓库和远程仓库是独立的除非你主动执行git pull否则远程的任何操作都不会影响你本地的代码。问已经用错误邮箱提交了怎么办先修改配置防止后续继续提交错误邮箱已有提交的修改方法在第 16 章会讲。如果已经推送到远程修改历史需要和团队协调。问我找到工作了发第一个 PR 之前需要读多少建议扎实读完 01-08 章至少把基本操作练熟。第 06 章的远程协作内容是必读的。13. 总结13.1 一页速记项目要点Git 是什么帮你记录文件每一次改动的工具像游戏存档核心特点分布式离线也能用、存快照不是存差异、分支便宜想开就开Git vs GitHubGit 是工具GitHub 是网站像电饭锅 vs 共享厨房起源2005 年 Linus Torvalds 为 Linux 内核开发而创建现在要做的安装 Git、配置名字和邮箱、建第一个空仓库下一步第 02 章理解「三棵树」模型13.2 本系列中的位置01 导论你在这里 → 02 三棵树模型 → 03 基本工作流 → ... ↑ 后面每个命令都要用到这个模型13.3 思维升华Git 不是保存按钮也不是网站——它是历史引擎。目标不是背全参数而是始终清楚「当前处于什么状态」「下一步想要什么状态」。先正确再谈速度。13.4 延伸阅读Pro Git — 关于版本控制三种模式的详细说明Pro Git — Git 简史更多历史细节初次运行 Git 前的配置本仓库图示署名assets/diagrams/ATTRIBUTION.md13.5 检查清单能不提「GitHub」的情况下用一句话说清 Git 是什么能用 2-3 句话说出 Git 为什么诞生能分清集中式和分布式版本控制的区别能分清 Git 和 GitHub 的区别本机git --version可以正常运行已设置user.name、user.email、init.defaultBranch已在可丢弃目录执行git init -b main知道「保存」和「提交」不是一回事知道不能把密码提交进仓库

相关新闻

政企ASP服务规范性考试:从合规安全到架构运营的全面能力评估

政企ASP服务规范性考试:从合规安全到架构运营的全面能力评估

1. 项目缘起:为什么政企需要一场“ASP服务”考试?最近几年,我接触了不少政企单位的数字化项目,从智慧政务到国企的内部管理系统,一个绕不开的话题就是“ASP服务”。你可能听说过ASP(Application Service Pr…

2026/8/7 11:35:27 阅读更多 →
RT-Thread Env工具详解:从零构建嵌入式项目的工程化管理

RT-Thread Env工具详解:从零构建嵌入式项目的工程化管理

1. 项目概述:为什么我们需要 Env 来管理 RT-Thread 工程? 如果你刚开始接触 RT-Thread 这个优秀的国产实时操作系统,可能会被它丰富的软件包生态和灵活的配置选项所吸引,但随之而来的一个现实问题是:如何高效地管理一个…

2026/8/7 11:34:27 阅读更多 →
从零部署Hermes Agent:构建可执行任务的AI智能体并集成飞书

从零部署Hermes Agent:构建可执行任务的AI智能体并集成飞书

1. 项目概述:为什么是Hermes Agent? 最近在AI智能体领域,一个叫Hermes Agent的项目讨论度挺高,不少之前折腾OpenClaw的朋友都在转向它。我自己也跟风试了一下,从零部署到实际接入飞书,跑通整个流程后&#…

2026/8/7 11:34:27 阅读更多 →

最新新闻

Kafka Producer拦截器实战:从原理到生产级监控实现

Kafka Producer拦截器实战:从原理到生产级监控实现

1. 项目概述:为什么我们需要关注Kafka Producer拦截器? 如果你正在使用Kafka,尤其是作为消息的生产者,那么你很可能遇到过这样的场景:你需要在每条消息发送前,给它统一加上一个时间戳或者一个唯一的追踪ID&…

2026/8/7 13:14:12 阅读更多 →
Unity材质系统深度解析:从PBR原理到Shader Graph实战与性能优化

Unity材质系统深度解析:从PBR原理到Shader Graph实战与性能优化

1. 项目概述:从“材质”二字说开去 在Unity里摸爬滚打这么多年,我越来越觉得,“材质”这个看似基础的概念,恰恰是区分新手和老鸟的一道分水岭。很多朋友刚接触Unity,以为材质就是给模型贴张图,调个颜色&…

2026/8/7 13:14:12 阅读更多 →
如何用Python快速设计芯片:GDSFactory光子芯片设计完整指南

如何用Python快速设计芯片:GDSFactory光子芯片设计完整指南

如何用Python快速设计芯片:GDSFactory光子芯片设计完整指南 【免费下载链接】gdsfactory A Python library for designing chips (Photonics, Analog, Quantum, MEMS), PCBs, and 3D-printable objects. We aim to make hardware design accessible, intuitive, and…

2026/8/7 13:14:12 阅读更多 →
从红外对管到循迹算法:自制灰度传感器与STM32小车全流程实战

从红外对管到循迹算法:自制灰度传感器与STM32小车全流程实战

1. 背景与核心概念:从“买成品”到“懂原理”的转变 在嵌入式开发、机器人竞赛和电子设计爱好者的圈子里,循迹小车是一个经典的入门项目。很多新手在动手时,第一步就是打开淘宝,搜索“灰度传感器模块”或“循迹模块”,…

2026/8/7 13:14:12 阅读更多 →
还在为网页视频无法保存而烦恼?这款免费Chrome插件让你轻松下载任何视频!

还在为网页视频无法保存而烦恼?这款免费Chrome插件让你轻松下载任何视频!

还在为网页视频无法保存而烦恼?这款免费Chrome插件让你轻松下载任何视频! 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper …

2026/8/7 13:14:12 阅读更多 →
PL2303驱动终极修复指南:Windows 10下旧款芯片完整兼容方案

PL2303驱动终极修复指南:Windows 10下旧款芯片完整兼容方案

PL2303驱动终极修复指南:Windows 10下旧款芯片完整兼容方案 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 还在为Windows 10系统下PL2303串口设备无法识别…

2026/8/7 13:13:12 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →