当前位置: 首页 > news >正文

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

前言:

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

目录

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

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

三、Git发展简史

四、Git安装

Linux系统

Windows系统

Mac系统

五、创建 Gitee 仓库的详细步骤

1. 注册并登录 Gitee 账号

2. 创建新仓库

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

填写基础信息

初始化设置(可选)

分支模型(必选)

完成创建

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

3. 克隆仓库到本地

HTTPS 方式(适合所有用户)

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

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

七、基础操作 - "三板斧"

1、克隆仓库

2、添加文件

关键信息解读

Git 暂存区(Staging Area)

1. 暂存区是什么?

2. 为什么需要暂存区?

场景示例

暂存区工作流程 

关键信息解读

3、提交更改

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

1. 配置全局用户信息(推荐)

2. 仅配置当前仓库(临时)

3. 验证配置

4. 重新提交

注意事项

我们可以使用git log查看Git 提交历史,下面是对应的解释:

1. 最新提交 (commit df297a2...)

2. 初始提交 (commit dc9955e...)

关键观察

Git 状态 (git status) 解释

1. 分支状态

2. 操作提示

3. 工作目录状态

当前状态总结

4、推送到远程仓库

八、其他常用命令

查看历史

撤销更改(了解)

分支管理(了解)

九、.gitignore文件

十、首次使用配置

十一、Git 提交冲突问题总结

1. 冲突产生原因

2. 错误提示分析

3. 解决方案

4. 重要概念

5. 最佳实践

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系统

sudo yum install git -y  # CentOS/RHEL
sudo apt-get install git -y  # Ubuntu/Debian

Windows系统

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

Mac系统

brew install git

安装后验证:

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:

# 进入项目目录
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 方式(适合所有用户)

git clone https://gitee.com/你的用户名/my-project.git

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

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、克隆仓库

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、添加文件

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

echo "# Learn Git Project" > README.md

查看状态:

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/ 目录下的数据库❌ 隐藏文件

将文件添加到暂存区:

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、提交更改

git commit -m "add README file"

我们尝试提交更改(commit),但是会像上面这样提示我们,这是因为:

        这个错误表示 Git 无法识别我的身份,因为尚未配置用户信息(姓名和邮箱)。Git 要求每次提交都必须记录提交者信息。

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

1. 配置全局用户信息(推荐)
git config --global user.email "你的邮箱@example.com"
git config --global user.name "你的姓名"
  • 作用:所有仓库默认使用这个身份

2. 仅配置当前仓库(临时)
git config user.email "你的邮箱@example.com"
git config user.name "你的姓名"

(去掉 --global 参数,只对当前仓库生效)

3. 验证配置
git config --list  # 查看所有配置

一开始用户层面的相关信息什么都没有的配置:

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

4. 重新提交

配置完成后再次执行:

git commit -m "add README file"

注意事项

  1. 邮箱和姓名:

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

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

  2. 信息存储位置:

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

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

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

    • 用于追踪代码修改者

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

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

我们可以使用git log查看Git 提交历史,下面是对应的解释:

1. 最新提交 (commit df297a2...)
  • 提交IDdf297a2e99f661c98d95032b40a3bc6f46530f01
    (Git自动生成的唯一版本标识,缩写为df297a2即可)

  • 作者信息:

    • 姓名: Mingzhen Huang (拼音格式)

    • 邮箱: 1985833965@qq.com

  • 提交时间2025年7月6日 00:28 (北京时间)

  • 提交说明add README file(描述本次修改的内容)

2. 初始提交 (commit dc9955e...)
  • 提交IDdc9955ebfc43e0494384d1164d28d1749e8a9636

  • 作者信息:

    • 姓名: 某某某 (中文实名)

    • 邮箱: 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、推送到远程仓库

git push

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


八、其他常用命令

查看历史

git log
git log --oneline  # 简洁版
git log --graph  # 图形化显示分支

撤销更改(了解)

git checkout -- filename  # 放弃工作区修改
git reset HEAD filename  # 取消暂存

分支管理(了解)

git branch  # 查看分支
git branch new-feature  # 创建分支
git checkout new-feature  # 切换分支
git merge new-feature  # 合并分支

九、.gitignore文件

用于指定哪些文件不需要版本控制,示例:

# 忽略所有.log文件
*.log# 忽略node_modules目录
node_modules/# 但不要忽略重要的.log文件
!important.log

使用vim工具对.gitignore进行添加和修改过滤文件,一般使用*通配符来表示想要过滤的文件。 


十、首次使用配置

设置用户名和邮箱:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

设置默认编辑器:

git config --global core.editor vim

查看配置:

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相关学习,我会在学习完后再更新学习笔记!!!

http://www.dtcms.com/a/271499.html

相关文章:

  • 【02】MFC入门到精通——MFC 手动添加创建新的对话框模板
  • 【PyTorch】PyTorch中torch.nn模块的全连接层
  • C++每日刷题 day2025.7.09
  • 备受期待的 MMORPG 游戏《侍魂R》移动端现已上线 Sui
  • RK3588 buildroot 解决软件包无法下载
  • 用户查询优惠券之缓存击穿
  • RAC-CELL(小区)处理
  • Ubuntu连接不上网络问题(Network is unreachable)
  • 国产航顺HK32F030M: 串口调试debug,重定向c库函数printf到串口,重定向后可使用printf函数
  • 记一次接口优化历程 CountDownLatch
  • C语言模块化编程思维以及直流电机控制(第四天)
  • 深度学习——损失函数
  • 【使用Flask基于PaddleOCR3.0开发一个接口 调用时报错RuntimeError: std::exception】
  • JVM调优实战指南:让Java程序性能飞升的奥秘
  • PanTS: The Pancreatic Tumor Segmentation Dataset
  • 使用anaconda创建基础环境
  • 数据分析框架和方法
  • 数据分析-名词
  • pip 安装加速指南:配置国内镜像源(中国科技大学、清华、阿里云等)
  • Java武林:虚拟机之道 第七章:秘籍解析 - JVM调优参数
  • 经验分享-没有xcode也可以上传App Store Connect
  • S7-1500——(一)从入门到精通1、基于TIA 博途解析PLC程序结构(一)
  • c语言中的数组II
  • 景观桥 涵洞 城门等遮挡物对汽车安全性的影响数学建模和计算方法,需要收集那些数据
  • 周立功汽车软件ZXDoc深度解析:新能源汽车开发新基建的破局之道
  • java 语法类新特性总结
  • 【王树森推荐系统】排序05:排序模型的特征
  • 计蒜客T3473丑数、Leetcode2401最长优雅子数组、Leetcode167两数之和、Leetcode581最短无序连续子数组
  • 深度帖:浏览器的事件循环与JS异步
  • 【教程】基于GNN的药物相互作用网络中的链接预测