前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git 基础-仓库文件的每次修改和操作流程介绍,明白工作副本的含义

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

作者头像
zinyan.com
发布2023-07-13 17:03:04
3010
发布2023-07-13 17:03:04
举报
文章被收录于专栏:zinyanzinyan

1.前言

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

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

2.工作副本

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

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

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

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

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

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

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

2.1 文件周期

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

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

了解一下下面的流程图:

2.2 文件状态 git status 查询

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3. 操作指令

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

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

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

3.1 状态简览

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

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 zinyan 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.前言
  • 2.工作副本
    • 2.1 文件周期
      • 2.2 文件状态 git status 查询
      • 3. 操作指令
        • 3.1 状态简览
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档