0


Git第二章

一、工作区、暂存区、版本库

  • 工作区:写代码或文件的目录。
  • 暂存区:英文名stage或index。一般存放在.git目录下的index文件(.git/index)中,我们把暂存区有时也叫做索引(index)。(这里如果没有进行commit那么是找不到index目录的)下面会有讲解。
  • 版本库:又名仓库,英文名repository。工作区有一个隐藏目录.git,它不算⼯作区,⽽是 Git 的版本库。这个版本库⾥⾯的所有⽂件都可以被 Git 管理起来,每个⽂件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原/回滚”。

下⾯这个图展⽰了⼯作区、暂存区和版本库之间的关系:

  • 图中左侧为⼯作区,右侧为版本库。Git 的版本库⾥存了很多东西,其中最重要的就是暂存区。
  • 在创建 Git 版本库时,Git 会为我们⾃动创建⼀个唯⼀的 master 分⽀,以及指向 master 的⼀个指针叫HEAD。(分支和HEAD的概念后面再说)
  • 当对⼯作区修改(或新增)的⽂件执⾏ git add 命令时,暂存区(stage)⽬录树的⽂件索引会被更新。
  • 当执行提交操作git commit时,master分支会做相应的更新,可以简单理解为暂存区的目录树才会真正写到版本库中。
  • 由上述描述我们便能得知:通过新建或粘贴进⽬录的件,并不能称之为向仓库中新增⽂件,⽽只是在⼯作区新增了⽂件。必须要通过使用git add和git commit命令才能将文件添加到仓库中进行管理。
  • 那么回答暂存区的疑问,为什么初始化后没有index
  • 创建个文件是没有index/stage
  • add后就出现了

二、添加一个test文件(包含查看提交记录指令)

在包含.git 的目录下新建一个test文件,我们可以使⽤ git add 命令可以将文件添加到暂存区:

  • 添加⼀个或多个⽂件到暂存区: git add [file1.c] [file2.c]....
  • 添加指定目录到暂存区,包括子目录:git add[dir]
  • 添加当前目录下的所有文件到暂存区:git add

再使用git commit命令将暂存区内容添加到本地仓库中:

提交暂存区全部内容到本地仓库中:git commit -m "message"

提交暂存区的指定⽂件到仓库区: git commit [file1] [file2] ... -m "message"

注意 git commit 后⾯的 -m 选项,要跟上描述本次提交的message,由⽤⼾⾃⼰完成,这部分内

容绝对不能省略,并要好好描述,是⽤来记录你的提交细节,是给我们⼈看的。(相当于对本次提交内容的阐述)

我们还可以分别add不同的文件,而只commit一次便可以提交所有文件,是因为需要提交的文件都被add到暂存区了,commit就全提交了。

截⾄⽬前为⽌,我们已经能够将代码直接提交⾄本地仓库了。我们可以使⽤

git log

命令,查看历史提交记录。该命令显⽰从最近到最远的提交⽇志,并且可以看到我们commit时的⽇志消息。如果嫌输出信息太多,看得眼花缭乱的,可以试试加上 --pretty=oneline 参数

需要说明的是,我们看到的一大串类似b989c...54a0的是每次提交的版本号,Git的commit id不是1,2,3...递增的数字,而是一个SHA1(SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数,美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS))计算出来的一个非常大的数字,用十六进制表示。

三、查看.git文件

前面研究stage的时候看了.git的目录结构,这里便不再重复查阅。

可以知道的是

  • index就是暂存区,add后的内容就是添加到了这里面。
  • HEAD就是默认指向master分支的指针:

而默认的master分支,其实就是:

可以发现打印的那串数字就是版本号(commit id)

  • objects 为Git的对象库,⾥⾯包含了创建的各种版本库对象及内容。当执⾏git add 命令时,暂存区的⽬录树被更新,同时⼯作区修改(或新增)的⽂件内容被写⼊到对象库中的一个新的对象中,就位于“.git/objects”目录下

查找object时要将 commit id 分成2部分,其前2位是⽂件夹名称,后38位是⽂件名称。

找到这个⽂件之后,⼀般不能直接看到⾥⾯是什么,该类⽂件是经过sha (安全哈希算法)加密过的文件,好在可以使用git cat-file命令来查看版本库对象的内容:

这就是最近一次提交

其中,还有一行tree 838c778444d1f3e9d731f65854ea05e2a7f3a889看看它的结果

再看看test对应的版本号

这就是对test做的修改被记录下来了。

总结

在本地的git仓库中,有⼏个⽂件或者⽬录很特殊

• index:暂存区, git add 后会更新该内容。

• HEAD:默认指向master分⽀的⼀个指针。

• refs/heads/master:⽂件⾥保存当前master分⽀的最新 commit id 。

• objects: 包含了创建的各种版本库对象及内容,可以简单理解为放了git维护的所有修改。

标签: git

本文转载自: https://blog.csdn.net/m0_61630449/article/details/143131808
版权归原作者 KrisZhang10 所有, 如有侵权,请联系我们删除。

“Git第二章”的评论:

还没有评论