Git原理与使用详解(二):初探Git仓库与核心工作流程

一、 引言:从零开始构建你的代码时光机

在上一篇中,我们成功在电脑上安装了Git,它就像一台功能强大的"时光机"的引擎。但只有引擎还不够,我们需要为我们的项目建立一个"机库",也就是Git仓库。本篇将带领你踏出Git实战的第一步:创建你的第一个Git仓库,并深入理解Git赖以运作的核心机制------工作区、暂存区和版本库的"三区"协作。掌握这些基础概念,是后续自如运用分支、合并、远程协作等高级功能的基石。

二、 创建你的第一个Git仓库

仓库是Git进行版本控制的基本单位,它是一个被Git跟踪管理的文件目录。所有文件的修改、删除,Git都能在这个仓库内进行跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻进行"还原"。

创建Git仓库的命令是 git init。这个命令会在当前目录下创建一个名为 .git的隐藏子目录,这个目录就是Git的版本库,你所有的版本信息、配置、日志等都存放在这里。

实战演示:

  1. 准备一个空目录 :首先,我们创建一个名为 gitcode的目录作为我们的工作空间,并进入该目录。

    复制代码
    # 在home目录下创建gitcode文件夹
    root@139-159-150-152:~$ mkdir gitcode
    # 进入gitcode目录
    root@139-159-150-152:~$ cd gitcode
    # 查看当前所在路径 (Print Working Directory)
    root@139-159-150-152:~/gitcode$ pwd
    /home/root/gitcode
  2. 初始化Git仓库 :在当前目录下执行 git init命令。

    复制代码
    root@139-159-150-152:~/gitcode$ git init
    Initialized empty Git repository in /home/root/gitcode/.git/

    这行提示信息告诉我们,一个空的Git仓库已经在 /home/hyb/gitcode/.git/目录下初始化成功了。

  3. 查看隐藏的.git目录 :使用 ls -a命令查看所有文件(包括隐藏文件)。

    复制代码
    root@139-159-150-152:~/gitcode$ ll -a
    total 12
    drwxrwxr-x  3 hyb hyb 4096 May  5 15:49 ./
    drwxr-xr-x 13 hyb hyb 4096 May  5 15:47 ../
    drwxrwxr-x  7 hyb hyb 4096 May  5 15:49 .git/  # 这就是Git的版本库!

    我们发现,当前目录下多了一个 .git的隐藏目录。

重要警告.git目录是Git的"心脏",千万不要手动修改或删除这个目录里的任何文件,否则很可能会破坏整个Git仓库,导致版本历史丢失。

三、 初次使用Git的必备配置

当安装Git后,第一件需要做的事是设置你的用户名称和邮箱地址。这是非常重要的,因为你的每一次提交都会记录这些信息,从而区分不同的提交者。

配置命令是 git config

  1. 配置用户信息

    复制代码
    # 设置全局用户名(--global 选项表示对当前用户的所有仓库生效)
    git config --global user.name "Your Name"
    # 设置全局邮箱
    git config --global user.email "email@example.com"
    • 请将 "Your Name"替换成你的昵称(如 "hyb91")。

    • 请将 "email@example.com"替换成你的邮箱(如 "2689241679@qq.com")。格式正确即可,不要求是真实存在的邮箱(但推荐使用真实邮箱,尤其后续与Gitee/GitHub关联时)。

    --global参数说明

    • 如果使用了 --global选项,那么你这台机器上所有的Git仓库都会默认使用这个配置。

    • 如果你希望在不同仓库中使用不同的身份(比如公司项目用公司邮箱,个人项目用个人邮箱),可以不要--global选项,但执行命令时必须在目标仓库的目录下。

  2. 查看当前配置 :使用 git config -l命令可以列出当前的所有Git配置。

    复制代码
    root@139-159-150-152:~/gitcode$ git config -l
    user.name=liu
    user.email=2*********@qq.com
    # ... 可能会有其他配置项
  3. 删除配置(如果需要):如果配置错误,可以将其删除。

    复制代码
    # 删除全局的用户名配置
    git config --global --unset user.name
    # 删除全局的邮箱配置
    git config --global --unset user.email

四、 深刻理解Git的核心:工作区、暂存区、版本库

这是Git学习中最关键、也最需要理解透彻的一部分。很多初学者觉得Git操作难以理解,很大程度上是因为没有理清这三个概念的关系。

让我们通过一个生动的比喻来理解:想象你正在准备一顿丰盛的晚餐。

  • 工作区 (Working Directory) :就是你家的整个厨房 。你在这里洗菜、切菜、炒菜。对应到代码,就是你电脑上能看到的项目目录(比如我们的 ~/gitcode目录),你在这里新增、修改、删除文件。

  • 暂存区 (Stage/Index) :就像厨房里的一个备菜盘 。你把切好的、准备下锅的菜先放到这个盘子里。它是一个中间状态,用于临时存放你的改动。在Git中,暂存区实际上是 .git目录下的一个文件(.git/index)。

  • 版本库 (Repository) :就像一本精美的菜谱相册 。当你把一道做好的菜(已经放在备菜盘里的菜)拍照、写上制作心得,然后贴进相册,这道菜的做法就被永久记录下来了。在Git中,版本库就是那个 .git目录,它安全地存储着你所有提交过的版本历史。

它们之间的关系和工作流程,可以用下图清晰地展示:

让我们结合图表和命令来解析整个流程:

  1. 初始状态 :图中右侧的版本库里,最重要的部分是master分支 (Git默认创建的主分支)和指向它的HEAD指针(可理解为"当前所在位置"的标签)。

  2. 工作区 -> 暂存区 (git add)

    • 当你在工作区(厨房)新建一个 ReadMe.txt文件,或者修改了已有的文件,这些变动Git是知道的,但还处于"散落"状态。

    • 执行 git add <file>命令,就像是把切好的菜(你的修改)放入备菜盘(暂存区)。这个操作会更新暂存区的目录树。

    • 关键点 :仅仅在工作区创建或修改文件,并不能称之为向仓库中新增了文件。必须通过 git add命令将文件添加到暂存区,Git才开始真正跟踪这些变化。

  3. 暂存区 -> 版本库 (git commit)

    • 当你觉得备菜盘里的菜已经准备好了,可以"装盘出品"了,就执行 git commit命令。

    • 这个命令会将暂存区的内容(备菜盘里的所有菜)一次性、永久地提交到版本库的当前分支(master分支)中,形成一个快照(拍一张照贴进菜谱相册)。此时,master分支会更新到最新的提交,HEAD指针随着master一起移动。

    • 关键点 :可以多次执行 git add添加不同的文件到暂存区,然后只执行一次 git commit便可提交所有暂存区的修改。这正是因为 git commit是提交暂存区的全部内容

五、 实战:将文件纳入版本控制

现在,让我们把理论付诸实践,完成一次完整的文件添加流程。

场景一:添加新文件到仓库

  1. 在工作区创建文件 :在 gitcode目录下新建一个 ReadMe文件。

    复制代码
    root@139-159-150-152:~/gitcode$ touch ReadMe
    # 使用vim或其他编辑器向ReadMe文件写入内容
    root@139-159-150-152:~/gitcode$ vim ReadMe
    # 查看文件内容,例如写入了两行
    root@139-159-150-152:~/gitcode$ cat ReadMe
    hello world
    hello git
  2. 将文件添加到暂存区 (git add)

    复制代码
    # 添加指定文件到暂存区
    root@139-159-150-152:~/gitcode$ git add ReadMe
    # 或者,添加当前目录下所有有变动的文件到暂存区
    # git add .
    • git add [file1] [file2]...:添加一个或多个指定文件到暂存区。

    • git add [dir]:添加指定目录(包括子目录)到暂存区。

    • git add .:添加当前目录下的所有文件改动到暂存区。这是最常用的方式。

  3. 将暂存区内容提交到版本库 (git commit)

    复制代码
    root@139-159-150-152:~/gitcode$ git commit -m "commit my first file"
    [master (root-commit) c614289] commit my first file
     1 file changed, 2 insertions(+)
     create mode 100644 ReadMe
    • -m选项后面跟的字符串 "commit my first file"是本次提交的说明信息。这部分内容绝对不能省略,并且要清晰描述本次提交的细节,这是给未来自己或队友看的"日记"。

    • 执行成功后,Git会告诉我们:1个文件被改动(新增的ReadMe文件),插入了两行内容。

查看提交历史 :使用 git log命令可以查看提交记录。

复制代码
root@139-159-150-152:~/gitcode$ git log
commit c61428926f3853d4ec6dde904415b0e6c1dabcc6 (HEAD -> master)
Author: ***********
Date:   Fri May 5 16:00:00 2023 +0800

    commit my first file

这条记录显示了提交的完整ID(一长串SHA-1值)、作者、提交时间和提交信息。

六、 总结

本篇博客我们完成了Git的实战第一步:创建仓库、进行基础配置,并完成了第一次文件提交。我们深入剖析了Git的核心------工作区、暂存区、版本库的"三区"概念及其协作流程,这个模型是理解所有后续Git操作的关键。记住,git add是将改动从工作区放入暂存区,git commit才是将暂存区的改动永久保存到版本库。

在下一篇中,我们将进一步探索Git仓库的奥秘,深入 .git目录内部,看看Git到底是如何存储我们的版本历史的。同时,我们会学习更多关于文件修改、状态查看和差异比较的实用命令。

相关推荐
阿白逆袭记2 小时前
Git原理与使用详解(三):深入.git与文件管理实战
大数据·git·elasticsearch
鸿乃江边鸟2 小时前
Spark Datafusion Comet 向量化Rule--CometExecRule分析 规则转换分析
大数据·spark·native
Hello.Reader2 小时前
Flink on Hadoop YARN 从 0 到可上线的 Session / Application 部署指南
大数据·hadoop·flink
小五传输2 小时前
国产FTP服务器软件 如何构建自主可控的文件传输架构?
大数据·运维·安全
木易 士心2 小时前
GitLab 安装指南
git·gitlab
硕博计算机毕设指导2 小时前
【大数据毕设全套源码+文档】Django基于大数据技术的智慧居家养老服务平的设计与实现(丰富项目+远程调试+讲解+定制)
大数据·python·信息可视化·django·毕业设计·课程设计
B站计算机毕业设计超人2 小时前
计算机毕业设计Python+Django考研院校推荐系统 考研分数线预测系统 大数据毕业设计 (代码+LW文档+PPT+讲解视频)
大数据·人工智能·hive·python·django·毕业设计·课程设计
what丶k2 小时前
SQL三大核心查询语法(WHERE/ORDER BY/GROUP BY)综合运用指南
大数据·数据库·sql·mysql·面试
阳艳讲ai3 小时前
九尾狐AI智能矩阵:重构企业获客新引擎
大数据·人工智能