目录
- 前言
- [一、Git 的起源与历史背景](#一、Git 的起源与历史背景)
-
- [1.1 Linux 内核开发的版本管理困境](#1.1 Linux 内核开发的版本管理困境)
- [1.2 Git 的诞生与命名](#1.2 Git 的诞生与命名)
- 二、理解版本控制的核心概念
-
- [2.1 什么是版本控制?](#2.1 什么是版本控制?)
- [2.2 高效版本控制的实现原理](#2.2 高效版本控制的实现原理)
- [三、Git 的核心机制与仓库概念](#三、Git 的核心机制与仓库概念)
-
- [3.1 什么是仓库(Repository)?](#3.1 什么是仓库(Repository)?)
- [四、Git 与 GitHub/Gitee 的关系辨析](#四、Git 与 GitHub/Gitee 的关系辨析)
-
- [4.1 为什么要区分 Git 和 GitHub/Gitee?](#4.1 为什么要区分 Git 和 GitHub/Gitee?)
-
- [4.1.1 Git:本地版本控制器](#4.1.1 Git:本地版本控制器)
- [4.1.2 GitHub & Gitee:远程托管平台](#4.1.2 GitHub & Gitee:远程托管平台)
- [4.2 分布式与去中心化架构](#4.2 分布式与去中心化架构)
- 五、远端代码托管平台与仓库创建
-
- [5.1 为什么需要远端平台](#5.1 为什么需要远端平台)
- [5.2 Gitee 注册与登录](#5.2 Gitee 注册与登录)
- [5.3 创建远端仓库](#5.3 创建远端仓库)
-
- [5.3.1 基本信息](#5.3.1 基本信息)
- [5.3.2 可见性选择](#5.3.2 可见性选择)
- [5.3.3 初始化仓库选项(重点)](#5.3.3 初始化仓库选项(重点))
- [5.3.4 设置模板选项](#5.3.4 设置模板选项)
- [5.4 创建后的仓库页面](#5.4 创建后的仓库页面)
- [5.5 邀请协作者(团队开发)](#5.5 邀请协作者(团队开发))
-
- [5.5.1 邀请方式](#5.5.1 邀请方式)
- [5.5.2 角色权限](#5.5.2 角色权限)
- [5.5.3 审核机制](#5.5.3 审核机制)
- [六、本地 Git 环境准备](#六、本地 Git 环境准备)
-
- [6.1 安装 Git](#6.1 安装 Git)
- [6.2 配置用户身份](#6.2 配置用户身份)
- 七、将远端仓库克隆到本地
-
- [7.1 获取仓库地址](#7.1 获取仓库地址)
- [7.2 执行克隆命令](#7.2 执行克隆命令)
- [7.3 HTTPS 认证方式](#7.3 HTTPS 认证方式)
- [八、Git 三板斧:add、commit、push](#八、Git 三板斧:add、commit、push)
-
- [8.1 三板斧的完整工作流](#8.1 三板斧的完整工作流)
-
- [8.1.1 工作区(Working Directory)](#8.1.1 工作区(Working Directory))
- [8.1.2 暂存区(Staging Area / Index)](#8.1.2 暂存区(Staging Area / Index))
- [8.1.3 本地仓库(Local Repository)](#8.1.3 本地仓库(Local Repository))
- [8.1.4 远端仓库(Remote Repository)](#8.1.4 远端仓库(Remote Repository))
- [8.2 实操演示:第一次提交](#8.2 实操演示:第一次提交)
- [8.3 推送到远端](#8.3 推送到远端)
- [8.4 查看当前状态](#8.4 查看当前状态)
- 结语


🎬 云泽Q :个人主页
🔥 专栏传送入口 : 《C语言》《数据结构》《C++》《Linux》《蓝桥杯系列》《笔试算法》《AI赋能》《STM32》《Python》
⛺️遇见安然遇见你,不负代码不负卿~
前言
大家好啊,我是云泽Q,欢迎阅读我的文章,一名热爱计算机技术的在校大学生,喜欢在课余时间做一些计算机技术的总结性文章,希望我的文章能为你解答困惑~
一、Git 的起源与历史背景
1.1 Linux 内核开发的版本管理困境
要理解 Git,我们得先聊聊它的历史,这段历史和 Linux 有着极深的渊源。
在 Linux 内核开源之后,全球的工程师都参与到了开发中。那时候大家是怎么提交代码的呢?主要是通过邮件。开发者把代码片段写在邮件里发给 Linus Torvalds(Linux 之父),然后由 Linus 手动进行合并。大家可以想象一下那个画面:Linus 每天面对着海量的邮件,通过 Ctrl+C 和 Ctrl+V 把代码一段段粘贴到一起。这种方式不仅工作量巨大,而且极其容易出错,效率非常低。
1.2 Git 的诞生与命名
面对这种困境,Linus 尝试寻找现成的版本控制工具。但是,当时市面上大多数优秀的版本控制软件都是收费的,这与 Linux 的开源理念严重冲突,也会提高 Linux 的传播门槛。
期间发生过一件趣事:有一家版本控制公司曾经免费提供定制版软件给 Linux 社区使用。但是,后来因为社区里有人尝试破解该软件被发现,这家公司一气之下收回了授权。
这件事彻底激怒了 Linus,他决定不再依赖他人,而是自己动手,丰衣足食。他在极短的时间内,从零开始实现了一个版本控制系统,并将其命名为 Git。
关于 Git 这个名字,它的全称是 Global Information Tracker(全球信息追踪器)。Git 一经推出就立即开源,并迅速被原来的 Linux 开发者群体采用。凭借开源和高效的巨大优势,它逐步取代了 SVN,成为了当今主流的版本控制工具。所以我们要清楚,Git 的作者就是 Linux 的创始人 Linus Torvalds。
二、理解版本控制的核心概念
2.1 什么是版本控制?
我们要如何通俗地理解"版本控制"呢?我们可以拿学生提交实验报告来举个例子。
假设有两个学生,李四和张三,还有一位 C 语言老师(对应现实中的项目经理或产品经理)。
- 李四的做法:他每次修改实验报告时,都是直接在原文件上改。改完保存,之前的内容就没了。如果老师让他"把昨天的版本发给我看看",李四就傻眼了,因为他无法回溯历史版本。
- 张三的做法:张三很聪明,他对每一次修改都保留备份。比如第一次写完叫 V1,第二次修改后叫 V2,以此类推。这样,无论什么时候,他都可以随时恢复任意一个历史版本。
在软件开发中,程序员对应的就是张三或李四,而代码就是那份实验报告。如果我们像李四那样写代码,一旦改错了或者需求变了想回退,那就是一场灾难。
2.2 高效版本控制的实现原理
既然张三的方法好,那我们是不是把整个文件每次都复制一份存起来就行了?
对于小文件(比如几百 KB 的实验报告),手动全量备份是可行的。但在大型项目中,比如 Linux 内核有数百兆甚至上 G 的代码,如果每次只改了一行字,你就把几百兆的文件完整复制一份,这会浪费大量的存储空间。
Git 之所以高效,是因为它不采用全量备份 ,而是只记录"修改动作"。
我们可以看一张示意图来理解这个过程:

假设我们有 V1、V2、V3 等多个版本。Git 不会把 V2 的完整内容存下来,它只会记录从 V1 到 V2 发生了什么变化。比如:
- 第五行 :删除
XXXX - 第六行 :修改
mian->main - 第七行 :增加
printf("helloworld");
这些修改记录会生成一个唯一的标识,我们称之为 修改ID(在 Git 中通常称为 Commit ID)。
基于初始版本(V1)和这一系列的修改记录,Git 可以正向生成新版本(执行修改动作),也可以逆向回退旧版本(执行逆操作)。这就是为什么 Git 既快又省空间的原因。
三、Git 的核心机制与仓库概念
3.1 什么是仓库(Repository)?
刚才提到的张三为每位同学(王五、赵六等)创建独立文件夹存放版本,这些文件夹其实就是"仓库"的概念。
在 Git 中,当你在一个项目目录下初始化 Git 时,它会创建一个隐藏的目录(通常是 .git),这就是你的本地仓库 。这个仓库会自动管理该项目所有的历史版本及其修改记录。你不需要自己手动去建文件夹、重命名文件,Git 帮你把这些繁琐的"备份说明"工作全部自动化了。

本质上,Git 就是用 C/C++ 编写的一个软件,它把这种聪明的管理方式通过代码实现了出来。
四、Git 与 GitHub/Gitee 的关系辨析
4.1 为什么要区分 Git 和 GitHub/Gitee?
很多初学者容易混淆这两个概念。我们需要明确:Git 是一个软件工具,而 GitHub 和 Gitee 是基于 Git 的网站平台。
4.1.1 Git:本地版本控制器
Git 本身是一个命令行工具(虽然也有小乌龟等图形化界面,但核心是命令行)。它具有两个核心功能:
- 版本控制功能:在本地记录代码的修改历史。
- 网络同步功能:Git 本身设计之初就是一个分布式系统,它具备网络通信能力,可以将数据推送到远程,或者从远程拉取数据。
4.1.2 GitHub & Gitee:远程托管平台
随着发展,我们需要一个公共的地方来提供数据备份和管理服务。万一你本地的电脑坏了、磁盘坏了、操作系统挂了,那你所有的代码和版本记录就都没了。
这时候就需要一个"云端"的仓库。于是出现了 GitHub(国外)和 Gitee(国内,码云)。
- 本质:它们本质上是网站。
- 早期定位:用来做本地仓库同步到远端的功能。也就是所谓的"备份"。如果你的本地仓库挂了,你还可以从远端把代码拉下来。
- 现代功能:随着发展,它们提供了图形化界面、网络级的 Data 操作、多人协作功能等。甚至现在你在 Gitee 网站上直接修改代码,它底层也是通过 Git 机制在网站的服务器端进行管理,并自动同步到你的本地(如果你配置了关联的话)。
4.2 分布式与去中心化架构
Git 被称为"去中心化的、分布式的多版本控制器"。这是什么意思呢?
看这张架构图,我们可以看到 Windows 平台和 Linux 平台上都运行着 Git。

- CS 一体:Git 既是客户端(Client)也是服务端(Server)。每一台安装了 Git 的电脑,都是一个完整的版本库。
- 对等关系:不像 SVN 那样必须依赖一个中心服务器,Git 的每个节点地位都是平等的。你可以把你的仓库同步给别人的电脑,别人也可以同步给你。
GitHub 和 Gitee 只是充当了一个大家都认可的"中心节点"或者是"公共交换站"的角色,方便大家进行代码的汇聚和分发。但即便没有它们,Git 依然可以在局域网内的两台电脑之间直接进行版本管理和同步。
五、远端代码托管平台与仓库创建
5.1 为什么需要远端平台
本地仓库的管理固然重要------你在自己的机器上建仓库、提交修改、用 Git 做版本管理,这一切都能独立完成。但问题是,只有你自己能访问。一旦涉及团队协作,或者你想把代码备份到远端防止本地硬盘损坏,本地仓库就不够用了。
所以我们需要把本地仓库同步到远端。反过来也一样,我们可以在远端先把仓库建好,再拉取到本地进行开发。本地仓库和远端仓库本质上完全一样,只是存放位置不同。
虽然国内常用的远端平台有 Gitee(码云)和 GitHub。由于网络原因,GitHub 在国内访问时经常不稳定,所以我们文章中的实操统一使用 Gitee。
5.2 Gitee 注册与登录
Gitee 的注册流程跟注册任何普通网站一模一样------填用户名、设密码、绑邮箱,没什么特殊之处。注册完成后直接登录即可。如有困惑可以看这篇文章零基础学会使用 Gitee:环境搭建与代码托管实战
5.3 创建远端仓库
登录 Gitee 后,点击右上角的加号按钮,选择"新建仓库",进入创建页面。创建时需要填写以下几项内容:
5.3.1 基本信息
- 仓库名称 :必填项。路径会自动根据名称生成。比如填
Test_delete,路径就是/test_delete。 - 仓库介绍 :选填,简单描述这个仓库的用途即可。比如写"一个测试的git仓库"。

5.3.2 可见性选择
- 开源(所有人可见):任何人都能浏览你的代码仓库。
- 私有(仅仓库成员可见):只有你邀请的协作者才能看到,适合商业项目或不公开的个人项目。
5.3.3 初始化仓库选项(重点)
创建时强烈建议勾选**"初始化仓库"**,它包含三个子选项:
- 选择语言 :比如选择 C++。选择语言后,系统会自动生成对应的
.gitignore文件。 - 添加 .gitignore :与语言选择联动,会自动匹配 C++ 项目中需要忽略的文件类型(如编译产生的
.o文件、可执行文件等),避免把无关的垃圾文件提交到仓库中。 - 添加开源许可证(License):这个选项非常重要。开源不等于"任何人都可以随便用"。开源许可证是一份法律声明,明确规定了他人在学习、修改、分发、商用等场景下各自的权利和义务。如果不选许可证,别人就不知道该怎么合法使用你的代码。所以务必勾选。
5.3.4 设置模板选项
还可以勾选**"设置模板"**,它会在仓库中自动添加一些文档模板:
- Readme 文件:强烈建议勾选。Readme 就是项目的"产品说明书",里面通常包含项目介绍、软件架构、安装教程、使用说明、参与贡献、特性等内容。
- Issue 模板文件:初学者暂时用不上,可以不选。
- Pull Request 模板文件:初学者暂时用不上,可以不选。
填写完毕后,点击底部的**"创建"**按钮,远端仓库就建好了。
5.4 创建后的仓库页面
仓库创建完成后,你会看到仓库的主页,包含以下几个区域:
- 文件列表 :初始化后默认包含
.gitignore、README.en.md、README.md三个文件。 - 顶部提示:如果创建时没有选择开源许可证,页面顶部会有一条醒目的提示------"你当前开源项目尚未选择许可证(LICENSE),点此选择并创建开源许可",点击可以后续补选。
- Readme 预览区:页面中部会直接渲染 README.md 的内容,展示项目介绍、软件架构、安装教程等结构化信息。
- 右侧信息栏 :显示仓库简介、分支数量(默认 master)、标签数、Stars 数、Watching 数、Forks 数等统计信息。

5.5 邀请协作者(团队开发)
如果你的项目需要多人协作,可以通过仓库的**"管理"**页面邀请其他成员加入:
5.5.1 邀请方式
- 链接邀请:生成一个邀请链接,有效期为 3 天,任何人拿到链接都可以加入。
- 二维码邀请:生成一个二维码,扫码即可加入,适合面对面协作场景。
- 直接添加 :通过对方的 Gitee 用户名直接添加。

5.5.2 角色权限
邀请成员时需要为其分配角色权限:
- 管理员:拥有仓库的所有权限,适合项目经理。
- 开发者:可以推送代码、创建分支、提交 PR,适合实际写代码的人。
- 观察者:只能查看代码,不能修改,适合产品经理或老板。
- 报告者:只能提交 Issue。
5.5.3 审核机制
如果担心随便有人通过链接加入,可以开启**"强制审核"**。开启后,所有通过链接邀请的人都需要管理员审核通过后才能正式加入仓库。
六、本地 Git 环境准备
6.1 安装 Git
要在本地使用 Git 管理代码,首先得安装 Git 客户端。以 CentOS 系统为例,在终端中执行:
bash
sudo yum install -y git
安装完成后,通过以下命令验证是否安装成功:
bash
which git
# 输出: /usr/bin/git
git --version
# 输出: git version 1.8.3.1
注意 :如果执行
yum install git时出现HTTP Error 403 - Forbidden的报错,通常是因为 CentOS 7 的官方镜像源已经停止维护,需要更换为 vault 源或第三方源。
6.2 配置用户身份
安装完 Git 后,必须先配置用户名和邮箱(填你自己的即可,我下面只是以我为例做演示),否则后续提交代码会报错:
bash
git config --global user.name '云泽'
git config --global user.email '2392709001@qq.com'
如果不配置就执行 git commit,系统会报错:
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
fatal: empty ident name (for <yunze@...>) not allowed
重要提醒:本地配置的用户名和邮箱,尽量和 Gitee 账号的用户名、邮箱保持一致。如果不一致,Gitee 就无法正确识别你的提交记录,页面上那些代表提交贡献的**"小绿点"**可能不会点亮,因为系统不认为那是你提交的。
七、将远端仓库克隆到本地
7.1 获取仓库地址
在 Gitee 仓库主页,点击**"克隆/下载"**按钮,会弹出一个对话框,提供多种协议地址:
- HTTPS :最常用的方式(这里就推荐HTTPS即可),地址格式如
https://gitee.com/yunzeQ/test_delete.git - SSH:需要配置 SSH 密钥,适合频繁操作。
- SVN:兼容旧版 SVN 客户端。
点击地址右侧的复制按钮 ,就可以把仓库地址复制到剪贴板。

7.2 执行克隆命令
在本地终端中,切换到你想存放代码的目录,执行:
bash
git clone https://gitee.com/yunzeQ/test_delete.git
克隆完成后,当前目录下会多出一个与仓库同名的文件夹(如 test_delete),里面包含了远端仓库的所有文件和 .git 目录。
7.3 HTTPS 认证方式
使用 HTTPS 协议克隆和推送时,每次操作都会要求输入账号密码进行验证:
Username for 'https://gitee.com': yunzeQ
Password for 'https://yunzeQ@gitee.com': 私人令牌
⚠️ 安全建议:出于安全考虑,Gitee 建议配置并使用**私人令牌(Personal Access Token)**替代登录密码进行克隆、推送等操作。私人令牌可以在 Gitee 的安全设置中生成,权限可控,且可以随时撤销。
八、Git 三板斧:add、commit、push
8.1 三板斧的完整工作流
Git 的核心操作可以概括为三板斧:
bash
git add . # 把工作区的修改添加到暂存区
git commit -m "XXX" # 把暂存区的内容提交到本地仓库
git push # 把本地仓库的提交推送到远端仓库
这三步分别对应三个不同的区域:
| 命令 | 动作 | 源区域 | 目标区域 |
|---|---|---|---|
git add |
添加修改 | 工作区 | 暂存区 |
git commit |
提交记录 | 暂存区 | 本地仓库 |
git push |
推送同步 | 本地仓库 | 远端仓库 |
8.1.1 工作区(Working Directory)
就是你实际写代码的地方,也就是 git clone 下来的那个文件夹里,你看得见、摸得着的所有文件。
8.1.2 暂存区(Staging Area / Index)
这是一个"中转站"。你修改了文件后,先用 git add 把修改"标记"一下放进暂存区,相当于告诉 Git:"这些修改我确认了,准备提交。"
8.1.3 本地仓库(Local Repository)
执行 git commit 后,暂存区里的内容被正式记录到本地仓库中,生成一条永久不可篡改的提交记录。
8.1.4 远端仓库(Remote Repository)
执行 git push 后,本地仓库的提交被同步到 Gitee 这样的远端平台上,团队成员就能看到你的最新代码。

8.2 实操演示:第一次提交
假设你在克隆下来的仓库中新增了进度条相关的代码文件(main.c、process.c、process.h、Makefile),然后执行以下操作:
bash
# 第一步:将所有修改添加到暂存区
git add .
# 第二步:提交到本地仓库,附带日志信息
git commit -m "进度条代码"
# 输出示例:
# [master 27ef2e4] 进度条代码
# 4 files changed, 172 insertions(+)
# create mode 100644 Makefile
# create mode 100644 main.c
# create mode 100644 process.c
# create mode 100644 process.h
8.3 推送到远端
本地提交完成后,执行 git push 将代码推送到远端:
bash
git push
如果是第一次推送,可能会看到一条警告信息:
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:
git config --global push.default matching
To squelch this message and adopt the new behavior now, use:
git config --global push.default simple
按照提示执行以下命令即可消除警告:
bash
git config --global push.default simple
推送成功后,输出类似:
Counting objects: 10, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 2.43 KiB | 0 bytes/s, done.
remote: Powered by GITEE.COM
To https://gitee.com/yunzeQ/test_delete.git
342354e..db849ff master -> master
此时刷新 Gitee 页面,就能看到你推送的新文件了。
8.4 查看当前状态
在任意时刻,可以通过 git status 查看仓库当前状态:
bash
git status
# 输出示例:
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
# (use "git push" to publish your local commits)
# nothing to commit, working directory clean
ahead of 'origin/master' by 2 commits:说明本地有 2 个提交还没推送到远端。nothing to commit, working directory clean:说明工作区是干净的,没有未提交的修改。
写到这里也是发现git的内容非常多,所以该部分也分为两篇来写~
该篇到此结束~
结语
