前言:
关于Git的详细学习,博主会在后期学习中尽快跟上进度,毕竟博主也没有多少时间了。现在可以根据这篇文章大概学习一下Git版本控制器,更详细的内容请关注Git专栏。
目录
[五、创建 Gitee 仓库的详细步骤](#五、创建 Gitee 仓库的详细步骤)
[1. 注册并登录 Gitee 账号](#1. 注册并登录 Gitee 账号)
[2. 创建新仓库](#2. 创建新仓库)
[方法 1:网页端创建(推荐新手)](#方法 1:网页端创建(推荐新手))
[方法 2:命令行创建(本地已有项目)](#方法 2:命令行创建(本地已有项目))
[3. 克隆仓库到本地](#3. 克隆仓库到本地)
[HTTPS 方式(适合所有用户)](#HTTPS 方式(适合所有用户))
[SSH 方式(需配置 SSH Key,适合高级用户)(了解即可,目前用不到)](#SSH 方式(需配置 SSH Key,适合高级用户)(了解即可,目前用不到))
[七、基础操作 - "三板斧"](#七、基础操作 - "三板斧")
[Git 暂存区(Staging Area)](#Git 暂存区(Staging Area))
[1. 暂存区是什么?](#1. 暂存区是什么?)
[2. 为什么需要暂存区?](#2. 为什么需要暂存区?)
[1. 配置全局用户信息(推荐)](#1. 配置全局用户信息(推荐))
[2. 仅配置当前仓库(临时)](#2. 仅配置当前仓库(临时))
[3. 验证配置](#3. 验证配置)
[4. 重新提交](#4. 重新提交)
[我们可以使用git log查看Git 提交历史,下面是对应的解释:](#我们可以使用git log查看Git 提交历史,下面是对应的解释:)
[1. 最新提交 (commit df297a2...)](#1. 最新提交 (commit df297a2...))
[2. 初始提交 (commit dc9955e...)](#2. 初始提交 (commit dc9955e...))
[Git 状态 (git status) 解释](#Git 状态 (git status) 解释)
[1. 分支状态](#1. 分支状态)
[2. 操作提示](#2. 操作提示)
[3. 工作目录状态](#3. 工作目录状态)
[十一、Git 提交冲突问题总结](#十一、Git 提交冲突问题总结)
[1. 冲突产生原因](#1. 冲突产生原因)
[2. 错误提示分析](#2. 错误提示分析)
[3. 解决方案](#3. 解决方案)
[4. 重要概念](#4. 重要概念)
[5. 最佳实践](#5. 最佳实践)
[6. 运维仓库的特殊性](#6. 运维仓库的特殊性)
一、为什么需要版本控制?
在日常工作和学习中,我们经常会遇到这样的情况:
场景示例:假设你正在写一份项目报告,过程可能是这样的:
-
第一天完成初稿,保存为"项目报告-v1.docx"
-
第二天做了些修改,保存为"项目报告-v2.docx"
-
第三天同事给了建议,你修改后保存为"项目报告-修改版.docx"
-
第四天领导要求调整结构,保存为"项目报告-最终版.docx"
-
第五天发现最终版有错误,又保存为"项目报告-真正最终版.docx"
问题:
-
文件版本混乱,难以管理
-
无法快速比较不同版本间的差异
-
多人协作时容易产生冲突
-
无法追溯每次修改的具体内容
二、什么是版本控制系统?
为了更高效地管理不同版本的文件,版本控制系统(Version Control System)应运而生。简单来说,版本控制系统是一种能够记录文件历史变更轨迹的系统,它可以追踪工程的每一次修改和版本迭代,同时支持多人协作开发。
核心功能:
-
记录文件修改历史
-
支持版本回退
-
支持多人协作开发
-
支持分支管理
目前最主流的版本控制系统是Git。Git支持管理各种格式的文件,包括文档(doc)、表格(excel)、设计图纸(dwg/dgn)以及建筑模型(rvt)等。对于开发人员而言,Git最重要的功能是帮助管理软件开发项目中的源代码文件。
实际例子 :
想象Git就像一个时间机器,它可以:
-
保存你项目每一个重要时刻的快照
-
允许你随时回到过去的某个时刻
-
允许你创建平行宇宙(分支)进行实验性开发
-
最后把各个平行宇宙的成果合并
三、Git发展简史
如同许多改变世界的伟大发明一样,Git诞生于一个充满变革与创新的时代。当时的Linux内核开源项目拥有大量参与者,但在1991至2002年间,项目维护工作主要耗费在提交补丁和归档管理这类繁琐事务上。2002年,项目组开始采用专有的分布式版本控制系统BitKeeper来管理代码。
2005年,BitKeeper开发商终止了与Linux内核开源社区的合作,收回了免费使用权。这一变故促使Linux社区(特别是创始人Linus Torvalds)基于使用BitKeeper的经验,决定开发全新的版本控制系统。为此,他们制定了若干明确目标:
Git设计目标:
-
速度快
-
简单的设计
-
强大的非线性分支支持
-
完全分布式
-
能高效管理超大规模项目
自2005年诞生以来,Git不断成熟完善,在保持高度易用性的同时,始终坚守其最初的设计目标。它以飞快的速度著称,特别适合管理大型项目,并拥有令人惊叹的非线性分支管理系统。
四、Git安装
Linux系统
bash
sudo yum install git -y # CentOS/RHEL
sudo apt-get install git -y # Ubuntu/Debian

Windows系统
从官网下载安装程序:Git - Downloading Package

Mac系统
bash
brew install git
安装后验证:
bash
git --version

五、创建 Gitee 仓库的详细步骤
Gitee(码云)是国内常用的 Git 代码托管平台,类似于 GitHub。以下是创建 Gitee 仓库的完整流程:
1. 注册并登录 Gitee 账号
-
访问 Gitee 官网
-
点击 "注册"(如已有账号,直接登录)
-
填写邮箱、用户名、密码等信息完成注册
2. 创建新仓库
方法 1:网页端创建(推荐新手)

填写基础信息
-
仓库名称 (必填)
作用:给你的代码仓库起个名字,就像给文件夹命名一样-
只能用英文、数字或短横线(如
my-project-1) -
名字要简短易懂,比如
shopping-website(购物网站)
-
-
归属 (必选)作用:决定这个仓库属于「个人」还是「团队」
-
仓库介绍 (可选)作用:用一句话说明这个仓库是干什么的
-
可见性(必选)
选项 作用 适用场景 开源 所有人能看/下载你的代码 想分享代码、开源项目 私有 只有你指定的人能看 公司项目、私人代码
初始化设置(可选)
-
初始化仓库(勾选后自动生成初始文件)
-
☑️ 设置语言(如 Java/Python,影响代码高亮和统计)
作用 :告诉 Gitee 你的项目用什么编程语言
影响:-
代码会按语言高亮显示(比如 Python 代码是彩色的)
-
Gitee 会统计代码量
-
-
☑️ 添加 .gitignore (选择模板,如
Python.gitignore)作用 :自动帮你忽略不需要上传的文件**(过滤器)**
例子:-
如果你选
Python.gitignore,系统会自动忽略__pycache__等临时文件 -
避免把垃圾文件传上网

-
-
☑️ 添加开源许可证(如 MIT、Apache 2.0)
作用 :法律文件,规定别人怎么用你的代码
常见选项:-
MIT:最宽松,别人可以随便用 -
GPL:要求使用者也必须开源
-
-
-
模板文件(可选)
-
☑️ Readme 文件 (自动生成
README.md)作用:项目的「说明书」 -
☑️ Issue/Pull Request 模板(标准化协作流程)
-
作用:规范别人提交问题或代码的格式
-
类比:就像你发微博时,系统自动给你加「话题标签」
-
-
分支模型(必选)
-
单分支模型 (默认
master分支):适合小型项目。 -
Git Flow 多分支模型: 自动生成
master(生产)、develop(开发)等分支,适合中大型项目。
| 选项 | 作用 | 适用场景 |
|---|---|---|
| 单分支 | 只有 master 一个分支 |
小项目、练习用 |
| Git Flow | 自动创建 dev feature 等分支 |
正式团队项目 |
完成创建

方法 2:命令行创建(本地已有项目)
如果本地已有项目,可关联到 Gitee:
bash
# 进入项目目录
cd my-project
# 初始化 Git
git init
# 添加文件并提交
git add .
git commit -m "Initial commit"
# 关联 Gitee 远程仓库
git remote add origin https://gitee.com/你的用户名/my-project.git
# 推送代码
git push -u origin master # 或 main(取决于分支名)
3. 克隆仓库到本地
创建完成后,可通过以下方式克隆仓库:
首先我们点击橙色方框按钮查看对应的各种克隆方式:

HTTPS 方式(适合所有用户)
bash
git clone https://gitee.com/你的用户名/my-project.git

SSH 方式(需配置 SSH Key,适合高级用户)(了解即可,目前用不到)
bash
git clone git@gitee.com:你的用户名/my-project.git

注 :SSH 方式需先在 "设置" → "SSH 公钥" 添加本地生成的
id_rsa.pub文件
六、创建GitHub项目(了解即可)
-
注册GitHub账号(https://github.com):

-
登录后点击右上角"+" → "New repository":

-
填写仓库名称(如"Linux")(注意:名称不能和你之前的仓库名称重复,系统会自动校验,此过程可能需要几秒钟):

-
选择公开(Public)或私有(Private):

-
校验完成后,点击下方的"Create repository"按钮确认创建:

-
复制项目页面中的项目链接,以便后续下载使用:

-
本地创建好一个放置代码的目录,然后下载仓库到这个目录,也就是下面第六点的具体操作第一步克隆仓库到本地,下面我使用国内的Gitee来演示,不使用国外的Github,原因你懂。
七、基础操作 - "三板斧"
本地创建好一个放置代码的目录,然后cd到这个目录中,也就是说使这个目录变成当前工作目录:

1、克隆仓库
bash
git clone https://github.com/yourname/learn-git.git
这里的链接也就是项目页面中的项目链接:

我们cd到拉取下来的目录中看一下,cat之后会发现其中的内容跟刚刚我们在Gitee上创建的仓库内容一模一样,我们就是在该目录下中进行文件操作的:


而README.en.md是README.md对应的英文版本 :

现在我们在Shell中输入ls -al命令,其中的.git才是真正意义上的远程仓库,默认是隐藏文件:

我们现在来tree一下看看其中的东西,可以看出来.git里面的内容还是有很多的,它是用来保存历史上的所有修改记录,一般保存在objects目录中(以后会细讲):

2、添加文件
在当前工作目录中,创建一个新文件:

bash
echo "# Learn Git Project" > README.md
查看状态:
bash
git status

关键信息解读
-
# On branch master:表示当前位于master分支(主分支) -
Changes not staged for commit:存在已修改但未暂存(未用git add标记)的文件 -
modified: README.md:README.md文件被修改过(但尚未准备提交) -
no changes added to commit:当前没有文件被暂存(需先用git add)
所以我们要了解是什么是暂存区
Git 暂存区(Staging Area)
暂存区(Staging Area)是 Git 版本控制系统的核心概念之一,它像一个「准备台」,帮你精确控制哪些修改需要被记录到版本历史中。
1. 暂存区是什么?
-
官方名称:也叫「索引(Index)」
-
作用 :临时存放你打算提交的修改(文件改动、新增或删除)
-
类比:
- 像网购时的「购物车」:先挑选商品(
git add),最后统一结算(git commit)
- 像网购时的「购物车」:先挑选商品(
2. 为什么需要暂存区?
场景示例
假设你同时修改了 3 个文件:
-
A.py:修复了重要 bug ✅(需要提交) -
B.py:临时调试代码 ❌(不想提交) -
README.md:更新文档 ✅(需要提交)
没有暂存区的问题 :
必须一次性提交所有修改,无法选择性提交。
暂存区工作流程

-
工作目录:直接编辑文件的地方(肉眼可见的文件夹)
-
暂存区 :用
git add将修改放入这里(相当于打标记) -
本地仓库 :用
git commit将暂存区内容永久保存 -
远程仓库 :用
git push同步到服务器(如 Gitee/GitHub)概念 位置 是否可见? 工作目录 你电脑上的实际文件夹(如 ~/project/)✅ 直接可见 暂存区 Git 内部的 .git/index文件❌ 隐藏文件 本地仓库 .git/目录下的数据库❌ 隐藏文件
将文件添加到暂存区:
bash
git add README.md
# 或添加所有文件
git add .(或者使用*)

关键信息解读
-
# On branch master-
含义 :表示当前位于
master分支(主分支) -
说明:所有Git操作都在这个分支上进行,后续的提交会影响这个分支。
-
-
# Changes to be committed:-
含义 :已暂存(通过
git add添加)但尚未提交的更改 -
说明 :这些修改已被标记为"准备提交"状态,等待执行
git commit永久保存到版本历史。
-
-
modified: README.md-
含义 :
README.md文件的修改已被暂存 -
说明:该文件的具体改动已进入暂存区(显示为绿色),成为下次提交的内容。
-
-
(use "git reset HEAD <file>..." to unstage)-
含义:提示如何撤销暂存操作
-
说明:如果误将文件加入暂存区,可用此命令将其移出(但不会丢失文件修改)。
-
3、提交更改
bash
git commit -m "add README file"

我们尝试提交更改(commit),但是会像上面这样提示我们,这是因为:
这个错误表示 Git 无法识别我的身份,因为尚未配置用户信息(姓名和邮箱)。Git 要求每次提交都必须记录提交者信息。
解决方案(了解,后面会细讲)
1. 配置全局用户信息(推荐)
bash
git config --global user.email "你的邮箱@example.com"
git config --global user.name "你的姓名"
-
作用:所有仓库默认使用这个身份

2. 仅配置当前仓库(临时)
bash
git config user.email "你的邮箱@example.com"
git config user.name "你的姓名"
(去掉 --global 参数,只对当前仓库生效)

3. 验证配置
bash
git config --list # 查看所有配置
一开始用户层面的相关信息什么都没有的配置:

添加之后,配置中多了用户信息:

4. 重新提交
配置完成后再次执行:
bash
git commit -m "add README file"

注意事项
-
邮箱和姓名:
-
建议使用真实邮箱(与GitHub/Gitee账号一致)
-
姓名可以是英文或拼音(中文可能显示为乱码)
-
-
信息存储位置:
-
全局配置:
~/.gitconfig文件 -
本地配置:当前仓库的
.git/config文件
-
-
为什么需要这些信息?
-
用于追踪代码修改者
-
会在提交历史中永久保存
-
开源项目通过这个识别贡献者
-

我们可以使用git log查看Git 提交历史,下面是对应的解释:
1. 最新提交 (commit df297a2...)
-
提交ID :
df297a2e99f661c98d95032b40a3bc6f46530f01(Git自动生成的唯一版本标识,缩写为
df297a2即可) -
作者信息:
-
姓名:
Mingzhen Huang(拼音格式) -
邮箱:
1985833965@qq.com
-
-
提交时间 :
2025年7月6日 00:28 (北京时间) -
提交说明 :
add README file(描述本次修改的内容)
2. 初始提交 (commit dc9955e...)
-
提交ID :
dc9955ebfc43e0494384d1164d28d1749e8a9636 -
作者信息:
-
姓名:
某某某(中文实名) -
邮箱:
1985833965@qq.com
-
-
提交时间 :
2025年7月5日 14:09 (UTC时间) -
提交说明 :
Initial commit(通常是仓库的第一个提交)
关键观察
-
作者姓名格式不一致, 建议统一格式(推荐使用中文名)
-
时间格式差异, 这是因系统时区设置变化导致,不影响使用
-
提交记录内容: 从
Initial commit到add README file,说明仓库从初始化到添加说明文件的演进过程
我们继续查看当前状态:

Git 状态 (git status) 解释
1. 分支状态
-
# On branch master:当前位于master分支(主分支) -
Your branch is ahead of 'origin/master' by 1 commit.-
含义 :本地仓库比远程仓库(
origin/master)多 1 个提交 -
说明 :你有尚未推送到远程仓库的新提交(本地已
commit但未push)
-
2. 操作提示
-
(use "git push" to publish your local commits)Git 建议你执行
git push将本地提交同步到远程仓库(如 GitHub/Gitee)
3. 工作目录状态
-
nothing to commit, working directory clean-
工作目录没有未暂存的修改
-
所有已修改的文件都已提交(或没有新修改)
-
当前状态总结
| 位置 | 状态 |
|---|---|
| 本地 master 分支 | 比远程多 1 个新提交 |
| 暂存区 | 无待提交内容 |
| 工作目录 | 无未跟踪或修改的文件 |
4、推送到远程仓库
bash
git push

完成推送到远程仓库这个过程了:

八、其他常用命令
查看历史
bash
git log
git log --oneline # 简洁版
git log --graph # 图形化显示分支

撤销更改(了解)
bash
git checkout -- filename # 放弃工作区修改
git reset HEAD filename # 取消暂存
分支管理(了解)
bash
git branch # 查看分支
git branch new-feature # 创建分支
git checkout new-feature # 切换分支
git merge new-feature # 合并分支
九、.gitignore文件
用于指定哪些文件不需要版本控制,示例:
bash
# 忽略所有.log文件
*.log
# 忽略node_modules目录
node_modules/
# 但不要忽略重要的.log文件
!important.log

使用vim工具对.gitignore进行添加和修改过滤文件,一般使用*通配符来表示想要过滤的文件。
十、首次使用配置
设置用户名和邮箱:
bash
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
设置默认编辑器:
bash
git config --global core.editor vim
查看配置:
bash
git config --list
十一、Git 提交冲突问题总结
我现在在windows端使用TortoiseGit提交一个测试文件,推送到远程仓库中:


然后我再用Linux端继续创建一个新的文件,进行提交操作,但是我们发现被拒绝推送到远程仓库:

1. 冲突产生原因
-
远程仓库(运维仓库)包含了本地没有的更改
-
其他人在你之前已经向同一分支推送了更改
-
本地提交历史与远程分支出现分叉
2. 错误提示分析

- Git 拒绝了推送操作,因为远程分支有本地不包含的新提交,也就是说我Linux端目前拉取下来的仓库是相较于当前的仓库是旧的,推送会导致错误,被拒绝!!!
3. 解决方案
-
先拉取远程更改 :执行
git pull获取远程最新更改
-
合并冲突 :解决可能出现的合并冲突


-
重新推送 :解决冲突后再次执行
git push,显示提交成功!!!

4. 重要概念
-
fast-forward:当本地分支可以直接指向远程分支的新提交时,称为快进合并
-
当不能快进合并时,需要手动解决冲突
5. 最佳实践
-
推送前总是先拉取最新更改 (
git pull) -
使用
.gitignore文件管理不需要版本控制的文件 -
保持与运维仓库同步,避免长期不更新本地代码
6. 运维仓库的特殊性
-
运维仓库通常是最新、最权威的版本
-
任何人在提交前都必须先与运维仓库同步
这个冲突是 Git 的正常工作机制,目的是防止代码覆盖,提醒开发者先整合最新更改再提交自己的修改。
后续更加详细的Git相关学习,我会在学习完后再更新学习笔记!!!