【Git】第五篇:基本操作(添加文件)

.git目录结构

在这里插入图片描述
我们在前文中提过了.git目录,也明确说了我们不能手动去.git目录下创建修改等任何操作。

添加文件

我们现在已经了解到,git是一个版本控制器,可以对我们的文件进行管理。而我们需要使用git管理文件的时候,我们必须将这些文件放到git仓库中,只有在git仓库中的文件才可以被我们的git追踪管理。

看完上面我们有个疑问:需要使用 git 进行文件管理,需要把文件放到仓库中,那是不是要我们把文件添加到.git目录下去呢?
文章开头又说我们不能手动去添加或修改.git目录下的任何文件,那我们该怎么将文件添加到仓库中去呢?

那接下来我们就看看如何将文件添加到版本库中去吧。

首先说明一下,所有的版本控制系统,其实只能跟踪到文本文件的改动,比如txt文件、网页、程序代码等等,Git也不例外。版本控制系统可以记录你每次的改动,比如在第5行添加了一个单词“linux”,在第八行删除了一个单词“windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但是却补能跟踪二进制文件的细致改动,只能把二进制文件每次串起来,也就是只知道图片或视频从100KB改成了200KB,但是到底改了啥,版本控制系统不知道,也没办法知道。

新建文件添加到本地仓库:git add、git commit -m

add:将文件添加到缓存区
commit:提交到本地仓库

  1. 在工作区创建一个文件readme.txt
在工作区创建一个文件
touch readme.txt  (linux中的新建文件命令)

vim readme.txt    #编辑该文件

在文件里写入一句话:
在这里插入图片描述

  1. 将文件提交到本地git版本仓库中
    • 首先:使用git add命令将文件添加到本地仓库的提交缓存(也就是提交到暂存区):
      git add readme.txt
      这个时候还不算添加到了本地仓库,我们还需要使用git commit命令为其添加修改的描述信息
    • 使用git commit命令为其添加修改的描述信息:(完成后,就将文件提交到了仓库中了)
      注意在使用git commit时我们只需要简单描述一下我们做了什么,不要像写注释那样写一大堆,不然将来在回滚代码或者查看历史版本时,很难审阅。
      我们需要使用-m选项来简写描述我们的信息,如果不使用-m,会调用终端的注释编辑器让你输入描述信息,但是不建议使用,因为注释编辑器比较难用,不舒服。
      git commit -m "add new file"
    • git commit 会为我们生成40位的哈希值,用于作为id,并把刚刚用git add添加到提交缓存区里的文件提交到本地仓库中,便于我们回滚,至此,这个文件就已经添加到本地仓库中了,同时本地仓库也迭代了一个版本。
      在这里插入图片描述

查看历史提交日志:git log

在这里插入图片描述
第一行的commit是哈希算法算出的id

Author是提交者是谁的意思,显示格式是:用户名 <邮箱>

Date的意思是提交时间,后面的+0800这个是格林尼治时间,代表当前是以哪儿的时间地作为基准,这是世界时间,用它来作为基数与当前所在地时差进行计算,包括地球自转等公式。

最下面的就是注释了,就是我们在git commit时添加的描述信息。

查看.git目录

在这里插入图片描述
我们可以看到,当我们将文件添加到本地仓库后,我们的.git目录和文章开头相比,就发生了变化。
在这里插入图片描述
还是这副图:

首先是index文件:我们在上一篇中说到的暂存区,就是这个文件,我们add就是先将文件添加到暂存区中(注意:不是将文件实体添加到暂存区中,暂存区存的是文件的索引,真正的文件实体在Git 对象库.git/objects)中)。
在这里插入图片描述

HEAD文件: 我们在上篇提到“HEAD” 实际是指向 master 分支的一个“游标”,我们可以查看一下HEAD指针是不是指向master的。
在这里插入图片描述
可以看到是指向master的。
在这里插入图片描述

我们可以查看一下master文件下存放的是什么内容:
在这里插入图片描述
是一串字符串,我们有没有觉得这一串字符串很熟悉呢?
在这里插入图片描述
其实就是我们最近一次提交的commit ID,这里我们就可能需要验证一下了,是只记录最近一次,还是存放所有提交的ID,因为我们目前直提交了一个文件,接下来我们多提交几个文件试试。
在这里插入图片描述
我们又想本地仓库中添加了两个文件,这是我们再去看看master中存放的是什么:
在这里插入图片描述
从这我们就可以发现,仅仅是存放最近一次提交的commit ID。

我们要知道,不管是index暂存区还是master分支,这两个目录树存放的都是文件实体索引,而实体又存放在Git 对象库.git/objects)中),那我们来看看object文件该怎么看:
在这里插入图片描述
其实这就里面就代表每个对象,那该怎么去看呢?其实很简答。
还是看commit ID,
ID的前两位是文件名(也就是文件夹的名称),所以我们就可以很快找到我们添加到仓库中的文件:
在这里插入图片描述
那我们既然找到他了,那我们来看看这个对象里具体有什么东西,这时我们不能再使用catl来进行查看了。用以下命令:

git cat-file -p commitID

例如:
在这里插入图片描述
我们查看到里面存放的是这些信息。我们可以观察到除了第一行的tree我们不知道是什么外,其他的我们都知道是什么。
patent: 是我们上一次提交的commitID,然后就是提交的用户邮箱,最后就是本对象提交时打印的描述信息。

那我们来看看 tree 里是什么:
在这里插入图片描述
可以看到里面存放的就是我们提交的文件,而每一个文件也都有自己的索引。
我们可以查看一下其中一个内容:
在这里插入图片描述
其实这里面就存放的是我们修改文件的内容


补充上文add与log的内容:

git add --all
git add .

git add --all命令会将当前目录下包括子目录下所有改动的文件提交到暂存区,注意只包括改动的文件,不改动的不会放到缓存区。

这个命令还会把删除的文件也提交进去

如你在本地删除了min.c ,这个命令会把删除信息也记录进去,然后在提交的时候把仓库里对应的min.c也删除掉,也就是说你在本地做的删除操作会被记录,提交仓库时会删除同样的文件,如果不想删除文件,可以使用git add .,注意后面有一个“.”点的符号,这个命令跟git add --all一样,但是不会记录删除操作。

只要对文件进行了修改,那我们就需要重新 git add,不然只是在工作区中修改,仓库中还是原来的版本

最后别忘记使用git commit提交到仓库中

git log --pretty=oneline

我们在使用git log命令看历史记录时,会打印以下信息:
在这里插入图片描述
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数
在这里插入图片描述


git status

可以查看当前仓库状态。
比如我对某个仓库里的文件,进行了修改,那我们就可以使用这个命令进行状态查看,或者我们在向仓库中添加新的文件时,也可以使用这个命令进行查看状态。
例如:
我们对一开始创建的readme.txt文件内容进行添加以下内容:
在这里插入图片描述

我们对文件进行修改后,使用git status来查看此时仓库状态。
在这里插入图片描述
这里很明确的提示咱们,修改的文件时哪个文件,而且只是在工作区进行了修改,并没有进行提交到暂存区中。

注意: 我们使用git status命令只能查看哪个文件被修改,并不能查看具体文件修改的内容。

查看被修改的内容:
命令:

git diff filename

例如:
在这里插入图片描述
对上述进行一下解析:

在这里插入图片描述

那我们进行提交到暂存区后看看。
在这里插入图片描述
此时我们就可以看到有个修改文件提交到了暂存区。
在这里插入图片描述

当我们提交到仓库中之后,在使用git status查看,则表示没有需要提交的文件了

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clumsy、笨拙

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值