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

【Git】基本指令

工作区、暂存区、版本库

  • 工作区:是在电脑上你要写代码或文件的目录。
  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,我们把暂存区有时也叫作索引(index)。
  • 版本库:又名仓库,英文名 repository 。工作区有一个隐藏目录 .git ,它不算工作区,而是 Git 的版本库。这个版本库里面的所有文件都可以被 Git 管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

下面这个图展示了工作区、暂存区和版本库之间的关系:

在这里插入图片描述

图中左侧为工作区,右侧为版本库。Git 的版本库里存了很多东西,其中最重要的就是暂存区。

• 在创建 Git 版本库时,Git 会为我们自动创建一个唯一的 master 分支,以及指向 master 的一个指
针叫 HEAD。(分支和HEAD的概念后面再说)

• 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区目录树的文件索引会被更新。

• 当执行提交操作 git commit 时,master 分支会做相应的更新,可以简单理解为暂存区的目录树才会被真正写到版本库中。

由上述描述我们便能得知:通过新建或粘贴进⽬录的⽂件,并不能称之为向仓库中新增文件,而只是在工作区新增了文件。必须要通过使用 git addgit commit 命令才能将文件添加到仓库中进行管理!!!

基本指令

在包含 .git 的目录下新建一个 ReadMe 文件,我们可以使用 git add 命令可以将文件添加到暂存区:
• 添加一个或多个文件到暂存区: git add [file1] [file2] ...
• 添加指定目录到暂存区,包括子目录: git add [dir]
• 添加当前目录下的所有文件改动到暂存区: git add .再使⽤ git commit 命令将暂存区内容添加到本地仓库中:
• 提交暂存区全部内容到本地仓库中: git commit -m "message"
• 提交暂存区的指定⽂件到仓库区: git commit [file1] [file2] ... -m "message"
注意 git commit 后面的 -m 选项,要跟上描述本次提交的 message,由用户完成,这部分内容绝对不能省略,并要好好描述,是用来记录你的提交细节,是给我们人看的。
例如:
在这里插入图片描述
git commit 命令执行成功后会告诉我们,1个文件被改动(就是我们新添加的ReadMe文件),插入了一行内容(ReadMe有一行内容)。
我们还可以多次 add 不同的文件,而只 commit 一次便可以提交所有文件,是因为需要提交的文件是通通被 add 到暂存区中,然后一次性 commit 暂存区的所有修改。如
在这里插入图片描述
截至目前为止,我们已经更够将代码直接提交至本地仓库了。我们可以使用 git log 命令,来查看下历史提交记录。
在这里插入图片描述
该命令显示从最近到最远的提交日志,并且可以看到我们 commit 时的日志消息。
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 --pretty=oneline 参数:
在这里插入图片描述
需要说明的是,我们看到的一大串类似 23807c5…56eed6 的是每次提交的 commit id版本号),Git 的 commit id 不是1,2,3……递增的数字,而是一个 SHA1 计算出来的一个非常大的数字,用十六进制表示(你看到的 commit id 和我的肯定不一样,以你自己的为准)。

查看 .git 文件

先来看看我们的 .git 的目录结构:
在这里插入图片描述

  1. index 就是我们的暂存区,add 后的内容都是添加到这里的。

  2. HEAD 就是我们的默认指向 master 分支的指针:
    在这里插入图片描述
    而默认的 master 分支,其实就是
    在这里插入图片描述
    打印的 82a32a9010e8dfc2c94124d973c744d92a120a53 是什么东西呢?保存的就是当前最新
    commit id

  3. objects 为 Git 的对象库,里面包含了创建的各种版本库对象及内容。当执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,就位于 “.git/objects” 目录下,让我们来看看这些对象有何用处:
    在这里插入图片描述
    查找 object 时要将 commit id 分成2部分,其前2位是文件夹名称,后38位是文件名称。

找到这个文件之后,一般不能直接看到里面是什么,该类文件是经过 sha (安全哈希算法)加密过的文件,好在我们可以使影 git cat-file 命令来查看版本库对象的内容:
在这里插入图片描述

这就是我们最近⼀次的提交

其中,还有⼀行tree 1fbf42c98753beefa45a2e0f48bd171dac697592,我们使用同样的方法,看看结果:
在这里插入图片描述
在看 test 对应的 8836513e5d67c172edd7e79031674c9bb2ffff69
在这里插入图片描述

这是我们对ReadMe做的修改!!被git记录了下来!!

总结一下,在本地的 git 仓库中,有几个文件或者目录很特殊

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

学习到这里,我们已经清楚了如何向仓库中添加文件,并且对于工作区、暂存区、版本库也有了一定的认识。那么我们再展示一种添加文件的场景,能加深对工作区、暂存区、版本库的理解,示例如下:
在这里插入图片描述
提交后发现打印了 1 file changed, 0 insertions(+), 0 deletions(-) ,意思是只有一个文件改变了,这时我们提出了疑问,不是新增了两个文件吗?

再来回忆下, git add 是将文件添加到暂存区, git commit 是将暂存区的内容添加到本地仓库中。由于我们并没有使用 git add file5file5 就不在暂存区中维护,所以我们 commit 的时候其实只是把已经在暂存区的 file4 提交了,而遗漏了工作区的 file5

如何提交 file5 呢?很简单,再次add , commit 即可。

相关文章:

  • 【全球化2.0 | ZStack发布Zaku容器云海外版 加速亚太生态布局
  • python项目中连接数据库详细版
  • Ubuntu搭建最简单WEB服务器
  • centos8 虚拟机重启后无法识别网卡 ens33 问题原因总结
  • 算法训练(leetcode)二刷第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • 最短路问题
  • linux上配置免密登录
  • 【每日五题系列】前端面试高频题目
  • VSCode 配置优化指南:打造极致高效的前端开发环境
  • 如何高效使用 Mybatis-Plus 的批量操作
  • java中小型公司面试预习资料(一):基础篇
  • python文本处理pdfminer库安装与使用
  • ZYNQ-PL学习实践(五)IP核之FIFO
  • Oracle SQL优化实战要点解析(11)——索引、相关子查询及NL操作(1)
  • Gartner发布2025年网络安全六大预测
  • PROFINET转PROFIBUS从案例剖析网关模块的协议转换功能
  • 蓝桥杯备赛:每日一题
  • 数据库两个表数据同步的核心方案与深度实践
  • Linux 下的 Docker 安装与使用
  • 第十五届蓝桥杯----B组cpp----真题解析(小白版本)
  • 网络科技公司名称大全简单大气/天津百度搜索排名优化
  • 外贸网站改版公司哪家好/杭州百度整站优化服务
  • 什么是网站托管/做网站价格
  • 广西建设银行行号查询网站/seo标题优化裤子关键词
  • 南京哪里有做网站的/seo排名优化
  • 自己做网站难/小红书网络营销策划方案