Git版本控制完全指南:从入门到实战(简单版)

前言:

关于Git的详细学习,博主会在后期学习中尽快跟上进度,毕竟博主也没有多少时间了。现在可以根据这篇文章大概学习一下Git版本控制器,更详细的内容请关注Git专栏。

目录

一、为什么需要版本控制?

二、什么是版本控制系统?

三、Git发展简史

四、Git安装

Linux系统

Windows系统

Mac系统

[五、创建 Gitee 仓库的详细步骤](#五、创建 Gitee 仓库的详细步骤)

[1. 注册并登录 Gitee 账号](#1. 注册并登录 Gitee 账号)

[2. 创建新仓库](#2. 创建新仓库)

[方法 1:网页端创建(推荐新手)](#方法 1:网页端创建(推荐新手))

填写基础信息

初始化设置(可选)

分支模型(必选)

完成创建

[方法 2:命令行创建(本地已有项目)](#方法 2:命令行创建(本地已有项目))

[3. 克隆仓库到本地](#3. 克隆仓库到本地)

[HTTPS 方式(适合所有用户)](#HTTPS 方式(适合所有用户))

[SSH 方式(需配置 SSH Key,适合高级用户)(了解即可,目前用不到)](#SSH 方式(需配置 SSH Key,适合高级用户)(了解即可,目前用不到))

六、创建GitHub项目(了解即可)

[七、基础操作 - "三板斧"](#七、基础操作 - "三板斧")

1、克隆仓库

2、添加文件

关键信息解读

[Git 暂存区(Staging Area)](#Git 暂存区(Staging Area))

[1. 暂存区是什么?](#1. 暂存区是什么?)

[2. 为什么需要暂存区?](#2. 为什么需要暂存区?)

场景示例

暂存区工作流程

关键信息解读

3、提交更改

解决方案(了解,后面会细讲)

[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. 工作目录状态)

当前状态总结

4、推送到远程仓库

八、其他常用命令

查看历史

撤销更改(了解)

分支管理(了解)

九、.gitignore文件

十、首次使用配置

[十一、Git 提交冲突问题总结](#十一、Git 提交冲突问题总结)

[1. 冲突产生原因](#1. 冲突产生原因)

[2. 错误提示分析](#2. 错误提示分析)

[3. 解决方案](#3. 解决方案)

[4. 重要概念](#4. 重要概念)

[5. 最佳实践](#5. 最佳实践)

[6. 运维仓库的特殊性](#6. 运维仓库的特殊性)


一、为什么需要版本控制?

在日常工作和学习中,我们经常会遇到这样的情况:

场景示例:假设你正在写一份项目报告,过程可能是这样的:

  1. 第一天完成初稿,保存为"项目报告-v1.docx"

  2. 第二天做了些修改,保存为"项目报告-v2.docx"

  3. 第三天同事给了建议,你修改后保存为"项目报告-修改版.docx"

  4. 第四天领导要求调整结构,保存为"项目报告-最终版.docx"

  5. 第五天发现最终版有错误,又保存为"项目报告-真正最终版.docx"

问题

  • 文件版本混乱,难以管理

  • 无法快速比较不同版本间的差异

  • 多人协作时容易产生冲突

  • 无法追溯每次修改的具体内容


二、什么是版本控制系统?

为了更高效地管理不同版本的文件,版本控制系统(Version Control System)应运而生。简单来说,版本控制系统是一种能够记录文件历史变更轨迹的系统,它可以追踪工程的每一次修改和版本迭代,同时支持多人协作开发。

核心功能

  • 记录文件修改历史

  • 支持版本回退

  • 支持多人协作开发

  • 支持分支管理

目前最主流的版本控制系统是Git。Git支持管理各种格式的文件,包括文档(doc)、表格(excel)、设计图纸(dwg/dgn)以及建筑模型(rvt)等。对于开发人员而言,Git最重要的功能是帮助管理软件开发项目中的源代码文件。

实际例子

想象Git就像一个时间机器,它可以:

  1. 保存你项目每一个重要时刻的快照

  2. 允许你随时回到过去的某个时刻

  3. 允许你创建平行宇宙(分支)进行实验性开发

  4. 最后把各个平行宇宙的成果合并


三、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项目(了解即可)

  1. 注册GitHub账号(https://github.com):

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

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

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

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

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

  7. 本地创建好一个放置代码的目录,然后下载仓库到这个目录,也就是下面第六点的具体操作第一步克隆仓库到本地,下面我使用国内的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

关键信息解读

  1. # On branch master: 表示当前位于 master 分支(主分支)

  2. Changes not staged for commit: 存在已修改但未暂存(未用 git add 标记)的文件

  3. modified: README.md: README.md 文件被修改过(但尚未准备提交)

  4. 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:更新文档 ✅(需要提交)

没有暂存区的问题

必须一次性提交所有修改,无法选择性提交。

暂存区工作流程

  1. 工作目录:直接编辑文件的地方(肉眼可见的文件夹)

  2. 暂存区 :用 git add 将修改放入这里(相当于打标记)

  3. 本地仓库 :用 git commit 将暂存区内容永久保存

  4. 远程仓库 :用 git push 同步到服务器(如 Gitee/GitHub)

    概念 位置 是否可见?
    工作目录 你电脑上的实际文件夹(如 ~/project/ ✅ 直接可见
    暂存区 Git 内部的 .git/index 文件 ❌ 隐藏文件
    本地仓库 .git/ 目录下的数据库 ❌ 隐藏文件

将文件添加到暂存区:

bash 复制代码
git add README.md
# 或添加所有文件
git add .(或者使用*)

关键信息解读

  1. # On branch master

    • 含义 :表示当前位于 master 分支(主分支)

    • 说明:所有Git操作都在这个分支上进行,后续的提交会影响这个分支。

  2. # Changes to be committed:

    • 含义 :已暂存(通过 git add 添加)但尚未提交的更改

    • 说明 :这些修改已被标记为"准备提交"状态,等待执行 git commit 永久保存到版本历史。

  3. modified: README.md

    • 含义README.md 文件的修改已被暂存

    • 说明:该文件的具体改动已进入暂存区(显示为绿色),成为下次提交的内容。

  4. (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"

注意事项

  1. 邮箱和姓名:

    • 建议使用真实邮箱(与GitHub/Gitee账号一致)

    • 姓名可以是英文或拼音(中文可能显示为乱码)

  2. 信息存储位置:

    • 全局配置:~/.gitconfig 文件

    • 本地配置:当前仓库的 .git/config 文件

  3. 为什么需要这些信息?

    • 用于追踪代码修改者

    • 会在提交历史中永久保存

    • 开源项目通过这个识别贡献者

我们可以使用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(通常是仓库的第一个提交)

关键观察

  1. 作者姓名格式不一致, 建议统一格式(推荐使用中文名)

  2. 时间格式差异, 这是因系统时区设置变化导致,不影响使用

  3. 提交记录内容:Initial commitadd 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. 解决方案

  1. 先拉取远程更改 :执行 git pull 获取远程最新更改

  2. 合并冲突 :解决可能出现的合并冲突

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

4. 重要概念

  • fast-forward:当本地分支可以直接指向远程分支的新提交时,称为快进合并

  • 当不能快进合并时,需要手动解决冲突

5. 最佳实践

  • 推送前总是先拉取最新更改 (git pull)

  • 使用 .gitignore 文件管理不需要版本控制的文件

  • 保持与运维仓库同步,避免长期不更新本地代码

6. 运维仓库的特殊性

  • 运维仓库通常是最新、最权威的版本

  • 任何人在提交前都必须先与运维仓库同步

这个冲突是 Git 的正常工作机制,目的是防止代码覆盖,提醒开发者先整合最新更改再提交自己的修改。

后续更加详细的Git相关学习,我会在学习完后再更新学习笔记!!!

相关推荐
Cx330❀2 小时前
Linux命名管道(FIFO)通信:从原理到实操,一文搞懂跨进程通信
大数据·linux·运维·服务器·elasticsearch·搜索引擎
遇满则缺2 小时前
新手第一次使用gitee全流程(附上常见错误以及解决方法)
git·gitee
嵌入式×边缘AI:打怪升级日志2 小时前
嵌入式Linux应用开发快速入门(从零到第一个程序)
linux·运维·notepad++
AI、少年郎2 小时前
MiniMind第 2 篇:破除大模型 “神秘感“, 环境搭建|Win/Linux 本地快速部署
linux·运维·服务器·ai·大模型训练·大模型微调·大模型原理
彭泽布衣3 小时前
Linux异常文件名文件如何删除
linux·运维·服务器
优泽云安全3 小时前
如何选择IRCS云信息安全管理系统 IRCS云资源评测
linux·服务器·安全·安全架构
ShineWinsu3 小时前
对于Linux:Ext系列文件系统的解析—下
linux·面试·笔试·文件系统··ext2·挂载分区
小夏子_riotous3 小时前
Docker学习路径——2、安装
linux·运维·分布式·学习·docker·容器·云计算
zhgjx-dengkewen3 小时前
eNSP实验:配置NAT Server
服务器·网络·华为·智能路由器