跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言

Git 核心原理与基础使用详解(上)

综述由AI生成深入剖析 Git 的核心原理与基础使用。首先介绍了版本控制的概念及 Git 的优势,随后详细讲解了在 CentOS、Ubuntu 及 Windows 系统下的安装方法。接着阐述了工作区、暂存区和版本库的三大区域机制,演示了文件添加、修改、回退及删除等基本操作。最后重点解析了分支管理的策略,包括分支创建切换合并、冲突解决、Fast-forward 模式以及 Bug 分支处理。旨在帮助开发者建立对 Git 的系统性认知,从原理到实操全面掌握版本控制工具。

神经兮兮发布于 2026/4/2更新于 2026/5/2224 浏览
Git 核心原理与基础使用详解(上)

Git 核心原理与基础使用详解

1. 初识 Git

在软件开发的全流程中,版本控制是保障协作效率、规避开发风险的核心基石。Git 作为目前最流行、最强大的分布式版本控制系统,已渗透到从个人开发到大型企业级项目的每一个环节。无论是多人协作时的代码冲突解决、开发过程中的版本回溯,还是跨环境的代码同步、分支管理,Git 都以其高效、安全、灵活的特性,成为开发者必备的核心工具。

版本控制的概念

在编写文档或代码时,为了防止丢失或修改失误,通常需要复制多个副本(如 v1, v2, 最终版等)。随着版本数量增多,管理变得困难。版本控制器(Version Control System)能记录工程的每一次改动和版本迭代,方便多人协同作业。

目前最主流的版本控制器是 Git。Git 可以控制电脑上所有格式的文件,但对于开发人员来说,最重要的是管理源代码文件。

注意事项: 所有的版本控制系统(包括 Git)只能跟踪文本文件的改动(如 TXT、网页、程序代码)。对于图片、视频等二进制文件,虽然也能管理,但无法跟踪具体变化,只能记录文件大小变更。

2. Git 安装

Git 是开放源代码的代码托管工具,最早在 Linux 下开发,现已支持 Linux、Unix、Mac 和 Windows 平台。

2.1 CentOS 系统安装 Git

以 CentOS 7.6 为例: 首先检查是否已安装:

git -bash: git: command not found

若未安装,执行以下命令:

sudo yum -y install git
git --version

2.2 Ubuntu 系统安装 Git

以 Ubuntu 22.04 为例: 检查安装情况:

git Command 'git' not found, but can be installed with: sudo apt install git

安装命令:

sudo apt-get install git -y
git --version

2.3 Windows 系统安装 Git

Windows 用户可前往官网下载并安装 Git for Windows。

3. Git 基本操作

3.1 创建 Git 本地仓库

仓库是进行版本控制的一个文件目录。创建 Git 本地仓库的命令为 git init,需在目标目录下执行。 执行后当前目录下会多出一个 .git 隐藏目录,这是 Git 用来跟踪管理仓库的,切勿手动修改其中文件。

3.2 配置 Git 本地仓库

安装 Git 后需设置用户名和邮箱地址:

git config --global user.name "Your Name"
git config --global user.email "[email protected]"

--global 为可选参数,表示该机器上所有 Git 仓库均使用此配置。若不添加,则仅在当前仓库生效。 查看配置:git config -l 删除配置:git config [--global] --unset user.name

3.3 认识工作区、暂存区、版本库

  1. 工作区:在电脑上你要写代码或文件的目录。
  • 暂存区:英文叫 stage 或 index,一般存放在 .git 目录下的 index 文件中。
  • 版本库:又名仓库,英文名 repository。工作区有一个隐藏目录 .git,它不算工作区,而是 Git 的版本库。
  • 工作机制:

    • 创建 Git 版本库时,Git 会自动创建一个唯一的 master 分支,以及指向 master 的一个指针叫 HEAD。
    • 对 work area 修改的文件执行 git add 命令时,暂存区目录树的文件索引会被更新。
    • 执行提交操作 git commit 时,master 分支会做相应更新,暂存区的目录树才会被真正写到版本库中。

    3.4 添加文件

    在包含 .git 的目录下新建文件,可使用 git add 将文件添加到暂存区:

    • 添加一个或多个文件:git add [file1] [file2] ...
    • 添加指定目录:git add [dir]
    • 添加当前目录下所有文件改动:git add .

    再使用 git commit 将暂存区内容添加到本地仓库:

    • 提交全部内容:git commit -m "message"
    • 提交指定文件:git commit [file1] [file2] ... -m "message"

    注意:-m 选项后的 message 由用户自己完成,用于记录提交细节。

    查看历史提交记录:git log 若嫌输出信息太多,可加上 --pretty=oneline 参数。 每次提交的 commit id 是一个 SHA1 计算出来的十六进制数字。

    3.5 查看 .git 文件

    .git 目录结构解析:

    1. index:暂存区,git add 后会更新该内容。
    2. HEAD:默认指向 master 分支的一个指针。
    3. refs/heads/master:文件里保存当前 master 分支的最新 commit id。
    4. objects:包含了创建的各种版本库对象及内容,存放了 Git 维护的所有修改。

    查找 object 时需将 commit id 分成两部分,前 2 位是文件夹名称,后 38 位是文件名称。可使用 git cat-file 命令来查看版本库对象的内容。

    3.6 添加文件—场景二

    若新增了两个文件 file4 和 file5,但未对 file5 执行 git add,则 git commit 时只会提交 file4。如需提交 file5,需再次 add 并 commit。

    3.7 修改文件

    Git 跟踪并管理的是修改,而非文件。例如新增一行、删除一行、更改字符等均为修改。

    查看当前仓库状态:git status 显示暂存区和工作区文件的差异:git diff [file] 查看版本库和工作区文件的区别:git diff HEAD -- [file]

    3.8 版本回退

    执行 git reset 命令用于回退版本,语法格式为:

    git reset [--soft | --mixed | --hard] [HEAD]
    
    • --mixed(默认):将暂存区的内容退回为指定提交版本内容,工作区文件保持不变。
    • --soft:工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本。
    • --hard:将暂存区与工作区都退回到指定版本。切记工作区有未提交的代码时不要使用该命令,因为未提交的代码会丢失。

    HEAD 说明:

    • 可直接写成 commit id。
    • HEAD 表示当前版本。
    • HEAD^ 上一个版本,HEAD^^ 上上一个版本。
    • 也可用 ~ 数字表示,如 HEAD~1 表示上一个版本。

    若清屏导致 commit 展示信息消失,可使用 git reflog 命令补救,该命令用来记录本地的每一次命令。

    3.9 撤销修改—情况一

    针对工作区的代码,还没有 add。 使用 git checkout -- [file] 命令让工作区的文件回到最近一次 add 或 commit 时的状态。注意命令中的 -- 很重要,不可省略。

    3.10 撤销修改—情况二

    已经 add,但没有 commit。 使用 git reset 回退暂存区的内容,工作区文件保持不变。随后丢弃工作区的修改。

    3.11 撤销修改—情况三

    已经 add,并且也 commit 了。 使用 git reset --hard HEAD^ 回退到上一个版本。前提是尚未把本地版本库推送到远程。

    3.12 删除文件

    在 Git 中,删除也是一个修改操作。 若直接在工作区删除文件,需使用 git rm 将文件从暂存区和工作区中删除,并且 commit。 若误删,可使用 git checkout -- [file] 恢复。

    4. 分支管理

    4.1 理解分支

    分支就是科幻电影里的平行宇宙。在版本回退里,每次提交,Git 都把它们串成一条时间线,这条时间线就可以理解为一个分支。截止到目前,只有一条时间线,即 master 分支。

    HEAD 严格来说不是指向提交,而是指向 master,master 才是指向提交的,所以 HEAD 指向的就是当前分支。

    4.2 创建、切换、合并分支

    1. 创建分支:git branch dev
    2. 切换分支:git checkout dev 切换到 dev 分支后,HEAD 指向 dev。在 dev 分支下修改并提交后,切回 master 分支,发现新内容不见了,因为 master 的提交点并未改变。
    3. 合并分支:git merge dev 将 dev 分支合并到当前分支。Fast-forward 代表'快进模式',直接把 master 指向 dev 的当前提交。

    4.3 删除分支

    合并完成后,dev 分支若无用可删除。注意如果当前正处于某分支下,就不能删除当前分支。 命令:git branch -d dev

    4.4 合并冲突

    在实际分支合并时,可能会遇到代码冲突。 Git 会用 <<<<<<<, =======, >>>>>>> 来标记出不同分支的冲突内容。此时必须手动调整冲突代码,并再次提交修正后的结果。

    4.5 分支模式

    通常合并分支时,如果可能,Git 会采用 Fast forward 模式。但这会导致分支历史信息丢失。 Git 支持强制禁用 Fast forward 模式,使用 --no-ff 参数。这样在 merge 时会生成一个新的 commit,从分支历史上可以看出分支信息。

    4.6 分支策略

    实际开发中的基本原则:

    • master 分支应该是稳定的,仅用来发布新版本,平时不能在上面干活。
    • 干活都在 dev 分支上,dev 分支是不稳定的。到某个时候(如 1.0 版本发布),再把 dev 分支合并到 master 上。
    • 团队成员每个人都有自己的分支,时不时往 dev 分支上合并。

    4.7 Bug 分支

    假如正在开发中发现 master 上有 bug,需要修复。 每个 bug 都可以通过一个新的临时分支来修复,修复后合并分支,然后删除临时分支。 若当前工作区有未提交的代码,可使用 git stash 命令将当前工作区信息进行储藏。 恢复现场:git stash pop(恢复的同时会把 stash 也删了)。 建议在自己分支上先合并 master,再让 master 去合并自己的分支,以便在本地解决冲突。

    4.8 删除临时分支

    每添加一个新功能,最好新建一个 feature 分支,开发完成后合并,最后删除该 feature 分支。 若中途停止开发,可使用 git branch -d 删除分支。

    分支的实际用途: 假设准备开发一个新功能,需要两周完成。第一周写了 50% 的代码,如果立即提交,不完整的代码库会影响他人;如果等写完再提交,存在丢失每天进度的风险。有了分支,可以在自己的分支上干活,想提交就提交,直到开发完毕后一次性合并到原来的分支上,既安全又不影响别人工作。

    目录

    1. Git 核心原理与基础使用详解
    2. 1. 初识 Git
    3. 版本控制的概念
    4. 2. Git 安装
    5. 2.1 CentOS 系统安装 Git
    6. 2.2 Ubuntu 系统安装 Git
    7. 2.3 Windows 系统安装 Git
    8. 3. Git 基本操作
    9. 3.1 创建 Git 本地仓库
    10. 3.2 配置 Git 本地仓库
    11. 3.3 认识工作区、暂存区、版本库
    12. 3.4 添加文件
    13. 3.5 查看 .git 文件
    14. 3.6 添加文件—场景二
    15. 3.7 修改文件
    16. 3.8 版本回退
    17. 3.9 撤销修改—情况一
    18. 3.10 撤销修改—情况二
    19. 3.11 撤销修改—情况三
    20. 3.12 删除文件
    21. 4. 分支管理
    22. 4.1 理解分支
    23. 4.2 创建、切换、合并分支
    24. 4.3 删除分支
    25. 4.4 合并冲突
    26. 4.5 分支模式
    27. 4.6 分支策略
    28. 4.7 Bug 分支
    29. 4.8 删除临时分支
    • 💰 8折买阿里云服务器限时8折了解详情
    • Magick API 一键接入全球大模型注册送1000万token查看
    • 🤖 一键搭建Deepseek满血版了解详情
    • 一键打造专属AI 智能体了解详情
    极客日志微信公众号二维码

    微信扫一扫,关注极客日志

    微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

    更多推荐文章

    查看全部
    • Linux 系统安装 MinIO 详细教程
    • AI 大模型通信机制:流式传输与数据封装逻辑解析
    • 家庭机器人落地难点分析:技术、成本与隐私
    • AI 改变内容营销:生成式引擎优化(GEO)入门与实践
    • C++ unordered_map/set 底层原理与位图布隆过滤器实现
    • Bing Webmaster 工具使用指南:添加、验证与提交站点地图
    • OpenClaw B 端企业级应用实战:CentOS 7 快速部署指南
    • 人工智能应用工程师(高级)课程体系与核心能力解读
    • Z-Image-Turbo_UI 本地 AI 绘图工具界面实测与使用
    • 人工智能早间新闻:英伟达 GTC 万亿美元目标与产业动态
    • C++ STL 常用容器详解:从 Vector 到 Map 实战指南
    • 闲鱼 x-sign 生成算法逆向分析
    • LlamaFactory 微调实战:关键参数配置与性能优化指南
    • PyCharm 安装与新手使用指南
    • Java 注解(Annotation):从原理到实战应用
    • 行星减速器:结构原理、计算与 C++ 实现
    • C++ 内存管理核心:智能指针原理与应用
    • 算法实战:位运算解决整数求和与缺失数字问题
    • 无线蜂窝网络:核心原理、架构与代际演进
    • FPGA 入门指南:从点亮第一颗 LED 开始

    相关免费在线工具

    • Base64 字符串编码/解码

      将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

    • Base64 文件转换器

      将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

    • Markdown转HTML

      将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

    • HTML转Markdown

      将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

    • JSON 压缩

      通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

    • JSON美化和格式化

      将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online