Git | 面试官问你 Git 原理,你能回答得出来吗?

原创声明

本文为 HinGwenWoong 原创,如果这篇文章对您有帮助,欢迎转载,转载请阅读文末的【授权须知】,感谢您对 HinGwenWoong 文章的认可!


前言

我们每天上班都要用到 Git,每次我们都输入那几个常用的命令,但是你知道这些命令到底执行了什么操作吗?下面我结合官方的文档和我自己的理解,和大家解释下每个命令到底执行了什么操作。

我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 👍 ,您的点赞可以让技术传播得更远更广,谢谢!

一、Git 简单介绍

  • Git 采用 【分布式管理系统】:将仓库里面的所有文件都镜像到本地,可以极大防止服务器的磁盘坏了导致代码丢失,还可以便捷进行分支开发
    在这里插入图片描述

  • 每次提交(commit)的时候,都是将修改的文件保存为一个快照并保存这个快照的索引。
    快照索引

  • Git 操作全程都是本地化,不需要担心网络不通不能保存副本;

  • Git 有文件校验,在储存前都会对文件计算 SHA-1 散列 校验和,以校验和来进行引用。因为有校验和的存在,所以无需担心文件在传输过程中损坏。

在这里插入图片描述

二、解开 Git 在日常上班操作中的神秘面纱

该教程使用的 Git 版本为 V2.28.0.windows.1
在这里插入图片描述

2.1 初始化仓库

git init

  • 每个新建的仓库,都要上来无脑输入一个 git init 。在 git 操作界面输入 git init 创建 git 所需要用到的文件
    在这里插入图片描述
  • 输入指令之后可以看到项目文件夹下面有 .git 文件夹生成,这个文件夹里面几乎包含了所有 Git 储存和操作的东西;如果你想备份一个项目,直接复制这个文件即可。
    在这里插入图片描述
  • 打开.git 文件夹,我们可以看到如下文件树:在这里插入图片描述
  • 注意:Git的版本不同,文件结构也会不同。
  • 各个文件及目录含义如下
文件/目录 名作用
hooks包含客户端或服务端的钩子脚本(hook scripts)
info包含一个全局性排除(global exclude)文件 , 用以放置那些不希望被记录在 .gitignore文件中的忽略模式(ignored patterns)
objectsGit 的核心组成部分,存储所有数据内容
refsGit 的核心组成部分,存储指向数据(分支、远程仓库和标签等)的提交对象的指针
config包含项目特有的配置选项
description仅供 GitWeb 程序使用,我们无需关心
HEADGit 的核心组成部分,指向目前被检出的分支
index (尚未创建)保存暂存区信息

2.2 第n次提交

git add xxx

  • 我们创建了一个仓库,并对仓库进行初始化之后,我们下一步要对文件进行跟踪。我们可以通过 git add 来指定需要跟踪的文件;
  • 我在文件夹下创建了一个新的文件 README.txt

在这里插入图片描述

  • 我们使用命令对其进行跟踪
    在这里插入图片描述
  • 执行之后,可以看到 .git 里面多了 index 文件
    在这里插入图片描述
  • 打开可以看到暂存区(index)区的文件
    在这里插入图片描述

git status

  • 使用 git status 命令查看哪些文件处于什么状态:
    在这里插入图片描述
  • 这里显示有一个新的文件README.txt ,正是我刚刚加入的新文件,并且可以看到已被 Git 追踪
  • 如何看是否被追踪,只要看 Changes to be committed 下面显示的文件即可,在其下面的文件都是已经暂存的状态了

git commit -m “xxx”

我们将这次需要提交的文件使用 add 进行暂存之后,我们可以提交了,使用命令提交:

在这里插入图片描述

  • 我们可以看到 commit 之后会有个结果反馈:当前的分支名(master),本次提交的完整 SHA-1 校验和是什么(8db4232),以及在本次提交中,有多少文件修订过,多少行添加和删改过
    在这里插入图片描述

  • .git 目录下可以看到多了 COMMIT_EDITMSG 文件 和 logs 目录
    在这里插入图片描述

  • 打开 COMMIT_EDITMSG 文件可以看到是我刚刚时候加上的消息
    在这里插入图片描述

  • refs 文件中,可以看到当前分支(master
    在这里插入图片描述

  • 并且可以看到目前该分支中已经提交的最新文件的完整 SHA-1 校验和,这里的是分支 master 的一个Git 引用
    在这里插入图片描述

  • 其对应 objects 中的对应文件,这里是 Git 进行存储的内容,每一次 commit 都会进行一次存储

在这里插入图片描述

  • 并且在 logs 目录中进行记录
    在这里插入图片描述

2.3 分支

2.3.1 创建分支 git branch xxx

  • 首先查看目前分支情况
    在这里插入图片描述

  • 可以看到目前只有一个分支 master

  • 创建一个 dev 的分支,并查看,可以看到成功创建 dev 分支

在这里插入图片描述

  • 可以在 .git/refs 目录中看到多出了一个新的文件 dev
    在这里插入图片描述
  • 打开 dev 文件可以看到创建该分支的最新文件的引用 SHA-1 校验和
    在这里插入图片描述
  • 打开文件 .git/HEAD,可以看到目前的引用分支名(master
    在这里插入图片描述

2.3.2 切换分支 git checkout

  • 在命令行进行分支的切换,并使用 git branch 检查当前所在分支:
    在这里插入图片描述
  • 切换成功之后,打开文件 .git/HEAD 可以看到里面的引用文件变成了 dev
    在这里插入图片描述

2.3.3 分支中提交

新建一个文件 SecondFile.txt,并且加入版本管理,并进行提交
在这里插入图片描述

  • 可以在 .git/logs/refs/heads/dev 中看到 上次提交的校验和、本次提交的校验和、提交人、邮箱、时间等信息
    在这里插入图片描述

总结

这篇文章通过从底层 .git 目录里面的文件变化,来对我们平常上班时候使用到的 Git 命令进行了解释,能够让大家对 Git 命令的操作有个更加深入的理解。

我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 👍 ,您的点赞可以让技术传播得更远更广,谢谢!


参考资料


授权须知

  1. 原创文章在推送两天后才可进行转载
  2. 转载文章,禁止声明原创
  3. 不允许直接二次转载,转载请根据原文链接联系作者
  4. 若无需改版,在文首清楚标注作者及来源/原文链接,并删除【原创声明】,即可直接转载。
    但对于未注明转载来源/原文链接的文章,我将保留追述的权利。

作者:HinGwenWoong
一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,共同进步!
CSDN: HinGwenWoong
原文链接:Git | 面试官问 Git 原理你可以回答得出来吗?

  1. 若需要修改文章的排版,请根据原文链接联系作者
  2. 再次感谢您的认可,转载请遵守如上转载须知!
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值