侧边栏壁纸
博主头像
Z同学博主等级

工作磨平激情前,坚持技术的热忱。 欢迎光临Z同学的技术小站。 分享最新的互联网知识。

  • 累计撰写 290 篇文章
  • 累计创建 57 个标签
  • 累计收到 98 条评论
Git

Git 基础-仓库文件的每次修改和操作流程介绍,明白工作副本的含义

Z同学
2022-03-24 / 0 评论 / 1 点赞 / 351 阅读 / 2,056 字
温馨提示:
本文最后更新于 2022-03-24,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1.前言

本篇主要也是介绍基础方面的知识。学会之后,我们可以在每次git提交操作之前都能详细的区分当前提交的文件内容。能够看明白Git提交时,系统日志中的各种含义。如果不清楚这之间的关系,那对于Git的了解就永远都处于一种会用,但是不理解的状态。

所以,了解文件状态,是我们掌握git的基础知识之一。同时也要弄明白很多文章中介绍的工作副本到底是什么。

2.工作副本

当我们学会从Git远端仓库拉取和推送之后,可能对于git addgit commit已经有一部分的了解了。

同时我在前几篇文章中也介绍过关于git的文件的几种提交时的状态。但是不够清晰,本篇就主要围绕这方面知识点进行展开和学习。

我们的文件存储在Git仓库,不管是本地仓库还是远端仓库。仓库中都是有一个存储的。

而我们每次修改不可能是修改仓库里面的文件,通常都是修改从仓库中检出的文件。这个文件我们通常称之为:工作副本

我们可以针对工作副本随意编辑和删除。如果改错了,随时都可以从仓库中进行回滚。我们能一直回滚到该文件第一次的提交记录。

我们本地的项目可以理解为:工作目录。而文件夹中的所有的文件都是每个独立的工作副本文件。我们针对该文件的操作都是对副本的一些操作,只有我们提交之后才会被git进行记录。其他人通过同步操作,就能将你的操作记录同步到他的本地仓库,然后他的本地工作副本就会进行刷新。

下面,统一将工作副本简称为文件进行介绍。

2.1 文件周期

我们所有的文件都其实包括两种状态:

  • 已跟踪:指文件已经被git记录,并纳入版本控制的文件。而已跟踪还有下面两种状态
    • 未修改:文件被git记录,但是没有进行编辑操作
    • 已修改:文件被修改,但是暂时存储在暂存区,没有提交更改记录给仓库。(容易被覆盖)
  • 未跟踪:指文件还没有被git记录,并未纳入版本控制的文件。

了解一下下面的流程图:

image-20220324111913664

2.2 文件状态 git status 查询

在上面的图解中,介绍了关于文件的几种状态流转。那么我们在git中如何查询呢?

可以通过git status 命令查询文件状态。示例:

image-20220324105035028

例如我的目录下,Untracked Files (未跟踪的文件)。下面的红色区域就是我的工作目录中没有提交过的文件。当我执行git add之后的效果如下:

image-20220324105242740

可以看到,当我们执行add之后,文件就变成了 Changes to be committed (暂存状态)

我们如果add操作之后,存储在暂存区。但是没有commit。我们再次进行修改文件后,执行git status之后。会出现下面的效果:

image-20220324110052858

我们会发现,相同的文件出现了两种状态。所以我们如果执行commit就会存储第一次add后的结果。我们需要再次执行add才行。意思就是更新到暂存区中。

我们每次的commit操作,都是将暂存区的数据提交到仓库。示例:

image-20220324110534265

我们commit操作之后,再查询git status后就会显示下面的效果:

image-20220324110614356

然后告诉我们,当前项目需要进行git push操作,提交到远程仓库。

image-20220324110901044

主要操作命令为:git push origin master

其中origin 是我们拉取远端仓库的时候给远端源命名的值(通常情况下,大家会使用origin这个命名而已)

而之后的master 就是我们当前仓库的分支名而已。就是这个命名

image-20220324111048374

在这篇文章中有简单介绍过这两个的关系和获取:Git 的基本使用(一)配置用户名邮件等以及代码拉取 (zinyan.com)

但是我们有时候可以看到有一个git restore -- staged命令。

特别是当我们执行git add之后,再查询status后,常见

image-20220324111342891

那么这是用来干什么的?我们add之后不应该执行commit么?为什么又有一个restore呢?很简单因为restore是撤销操作。

git restore :将在工作空间但是不在暂存区的文件撤销更改(内容恢复到没修改之前的状态)
git restore --staged XXXX:将暂存区的文件从暂存区撤出,但不会更改文件的内容。

就是一个撤销操作,撤销add的操作。

3. 操作指令

我们通过上面的过程就能知道基本的几种git的文件提交过程了:

$ git status //查询文件状态
$ git add .   //将文件添加到暂存 
$ git commit -m '更新说明'  //将暂存数据提交到本地仓库
$ git push origin master   //将本地仓库提交到远程仓库

我们整个流程大体是这样。但是中间还有不少过程,我们可以丰富学习

3.1 状态简览

我们上面的示例中,每次status 之后查询的数据太多了。如果文件比较多的话,我们得翻到何时才能看明白啊。

针对这种需求,git提供了简洁数据。示例: 输入: git status -s

image-20220324112653803

可以看到全部采用了缩写模式。前面的标志意思如下:

  • ??:新添加未跟踪的文件(我们需要add操作)
  • A:新添加到暂存区的文件(添加后没有修改过)
  • M:已经修改但是未暂存(仓库已经跟踪过,但是本次修改还没有存储到暂存)
  • MM:已经修改,暂存后又进行了修改(存在暂存区域,也还存在未暂存部分,就是有两个版本)

其中还有一个关键就是忽略,ignore文件。下篇介绍忽略文件吧。

1

评论区